2012-08-26 70 views
2

目前我與XmlWriter的工作,想問問它是如何可能在現有的XML文件中寫入,作爲一個例子:C#的XmlWriter - 添加元素的元素

A.XML

<info> 
     <description>Test3</description> 
     <loops>100</loops> 
</info> 

加入<Info>,例如

<name>Test1</name> 

<name>劇本沒有任何作用的位置,但如果是</info>之前寫的,因此最後一個元素將是最好的。

<info> 
     <description>Test3</description> 
     <loops>100</loops> 
     <name>Test1</name> 
</info> 

或:

<info> 
     <name>Test1</name> 
     <description>Test3</description> 
     <loops>100</loops> 
</info> 
+1

我做了很多編輯你的問題。你應該知道XML是區分大小寫的,所以你之前在開始和結束標籤之間使用不同大小寫的元素會導致問題。 – Jacob

回答

3

XmlWriter類是速度快,但僅在一個方向,由元件元件的寫入。如果要修改現有的XML,最簡單的方法是使用LINQ到XML:

var doc = XDocument.Parse(xml); // or XDocument.Load(xmlFilePath) 
doc.Root.Add(new XElement("name", "Test1")); 

doc.Save(xmlFilePath); 
+1

不要忘記添加'doc.Save(xmlFilePath);',因爲更改可能未保存。 – Dmytro

+0

是的,好的提示。我更新了例子。 – whyleee

1

我不建議你使用的XmlReader和作家,但如果你問...我猜你只需要閱讀你的XML,然後重寫它,但與新節點。例如

  XmlDocument d = new XmlDocument(); 
      d.Load("c:/a.xml"); 

      XmlNode root = d.FirstChild; 
      if(root.HasChildNodes) 
      { 
       using(XmlWriter writer = new XmlTextWriter("c:/a.xml", Encoding.Default)) 
       { 
        writer.WriteStartDocument(); 
        writer.WriteStartElement(root.Name); 
        foreach(XmlNode node in root.ChildNodes) 
        { 
         writer.WriteStartElement(node.Name); 
         writer.WriteValue(node.InnerText); 
         writer.WriteEndElement(); 

         // writing new node after "loop" node 
         if (node.Name == "loop") 
         { 
          writer.WriteStartElement("name"); 
          writer.WriteValue("test1"); 
          writer.WriteEndElement(); 
         } 

        } 
        writer.WriteEndElement(); 
        writer.WriteEndDocument(); 
       } 
      }