2012-03-02 5 views
0

ノードをXML文書に追加してから削除しようとしています。 ノードの追加は機能していますが、プログラムを再起動しない限りノードを削除できません。私のXMLドキュメントは、次のようになりますC#/ Unity3Dを使用してXML文書を作成してから削除する

public void removeBuildingNode (string fileNamePath, int buildingPosX, int buildingPosY) 
{ 
    XmlDocument doc = new XmlDocument(); 
    doc.Load (fileNamePath); 
    XmlNodeList nodes = doc.SelectNodes ("//BUILDING[@x='" + buildingPosX + "']"); 
    for (int i = nodes.Count - 1; i >= 0; i--) { 
     Debug.Log("" + i); 
     nodes[i].ParentNode.RemoveChild (nodes[i]); 
    } 
    doc.Save(fileNamePath); 
    Debug.Log(""+buildingPosX + ", " + buildingPosY); 


} 

Writeメソッド:

public void writeToExistingDoc (String fileNamePath, int x, int y, int t) 
{ 
    string filename = fileNamePath; 
    string xPos = "" + x; 
    string yPos = "" + y; 
    string type = "" + t; 

    //create new instance of XmlDocument 
    XmlDocument doc = new XmlDocument(); 

    //load from file 
    doc.Load (filename); 

    //create node and add value 
    XmlNode node = doc.CreateNode (XmlNodeType.Element, "BUILDING", null); 

    XmlAttribute atr = doc.CreateAttribute ("x"); 
    XmlAttribute atr2 = doc.CreateAttribute ("y"); 
    XmlAttribute atr3 = doc.CreateAttribute ("type"); 
    atr.Value = xPos; 
    atr2.Value = yPos; 
    atr3.Value = type; 
    node.Attributes.Append (atr); 
    node.Attributes.Append (atr2); 
    node.Attributes.Append (atr3); 



    //add to elements collection 
    doc.DocumentElement.AppendChild (node); 

    Debug.Log ("Element added"); 
    //save back 
    doc.Save (filename); 

} 

、ここでは、Removeメソッドである私が言ったように

<BUILDINGS ID="b"> 
<BUILDING x="50" y="80" type="1" /> 
<BUILDING x="25" y="125" type="1" /> 
<BUILDING x="35" y="125" type="1" /> 
<BUILDING x="45" y="125" type="1" /> 
</BUILDINGS> 

、メソッドは、最初にプログラムを実行し、writeメソッドを使用し、プログラムを再起動してremoveメソッドを使用するときに機能します。実行中の同じインスタンスでは動作しません。使用あなたがXmlDocumentオブジェクトを使用して上の曲がっていない場合、これは動作するはず

+0

ところで、イムは今だけのためのx座標を使用。 – Hassel

+0

何がうまくいかない?あなたのコードとテスト文書を使用して追加し、その後同じノードを削除した場合、それは私のために働きます。 .Where()メソッドと "from"キーワードを使用するのに問題がある –

答えて

0

...

http://searisen.com/xmllib/extensions.wiki

public void removeBuildingNode (string fileNamePath, int buildingPosX, int buildingPosY) 
{ 
    XElement doc = XElement.Load(fileNamePath); 
    var nodesToRemove = doc.Elements("BUILDING") 
     .Where(xe => xe.Get("x", int.MinValue) == buildingPosX); 

    foreach(XElement node in nodesToRemove.ToArray()) 
     node.Remove(); 

    doc.Save(fileNamePath); 

    Debug.Log(""+buildingPosX + ", " + buildingPosY); 
} 
+0

ライブラリとエクステンションを追加しました。 – Hassel

+0

は 'from'ではなく' in'でなければなりません - 私の間違いです。 'Where'は私のためにうまくコンパイルされます。あなたは 'XmlLib;'をファイルの先頭に置いて他の使い方と同じ名前空間に変更しましたか? Get()メソッドをスナップして同じクラスに入れることはできません。拡張メソッドは静的クラスでなければなりません。 –

関連する問題