C#XmlWriter-在元素中添加元素

C#XmlWriter-在元素中添加元素,c#,xmlreader,xmlwriter,C#,Xmlreader,Xmlwriter,目前,我正在使用XmlWriter,并想询问如何在现有XML文件中进行编写,例如: a、 xml 测试3      100 添加到,例如 <name>Test1</name> Test1 的位置不起作用,但最好是在之前编写,因此是最后一个元素 <info>      <description>Test3</description>      <loops>100</loops>      <name

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

a、 xml


测试3
     100
添加到
,例如

<name>Test1</name>
Test1
的位置不起作用,但最好是在
之前编写,因此是最后一个元素

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

测试3
     100
测试1
或:


测试1
测试3
     100

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

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

doc.Save(xmlFilePath);

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

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

doc.Save(xmlFilePath);

我不建议您使用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();
                }
            }

我不建议您使用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();
                }
            }

我对你的问题做了很多修改。您应该知道XML是区分大小写的,所以您前面的元素在开始标记和结束标记之间具有不同的大小写可能会导致问题。您应该知道XML是区分大小写的,所以您前面的元素在开始标记和结束标记之间的大小写不同会导致问题因为更改将不保存。不要忘记添加
doc.Save(xmlFilePath)因为更改将不保存。为什么不推荐XmlReader/Writer?为什么不推荐XmlReader/Writer?