C#XmlWriter - 在Element中添加元素

时间:2012-08-26 01:01:03

标签: c# xmlreader xmlwriter

目前我正在使用XmlWriter,并想询问如何在现有的XML文件中编写,例如:

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>

2 个答案:

答案 0 :(得分:3)

XmlWriter类很快,但只能逐个元素地向一个方向书写。如果要编辑现有XML,最简单的方法是使用LINQ to XML:

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

doc.Save(xmlFilePath);

答案 1 :(得分:1)

我不建议您使用XmlReader和Writer,但是如果您要问...我猜您只需要读取您的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();
                }
            }