C# 复制节点并更改属性的值

C# 复制节点并更改属性的值,c#,xml,xpath,copy,C#,Xml,Xpath,Copy,我有以下XML文件。我想复制一个新的“测试”并更改测试的ID。怎么可能呢 我已经可以复制节点,不幸的是没有在正确的位置(参见图片),而且我也不能更改ID。 有人能帮我解决吗 之前: 之后: 下面是一个使用System.Xml.Linq.XDocument的示例,这是一个比XmlDocument简单得多的API: //You can also use Load(), this is just so I didn't have to make a file XDocument doc = XDo

我有以下XML文件。我想复制一个新的“测试”并更改测试的ID。怎么可能呢

我已经可以复制节点,不幸的是没有在正确的位置(参见图片),而且我也不能更改ID。 有人能帮我解决吗

之前:

之后:


下面是一个使用
System.Xml.Linq.XDocument
的示例,这是一个比
XmlDocument
简单得多的API:

//You can also use Load(), this is just so I didn't have to make a file
XDocument doc = XDocument.Parse("<Toolings><Testing><Test><ID>1234</ID></Test></Testing></Toolings>");

//Grab the first Test node (change the predicate if you have other search criteria)
var elTest = doc.Descendants().First(d => d.Name == "Test");

//Copy the node, only necessary if you don't know the structure at design time
XElement el = new XElement(elTest);

el.Element("ID").Value = "5678";

//inject new node 
elTest.AddAfterSelf(el);

doc.Save("After.xml");
//您也可以使用Load(),这样我就不必创建文件了
XDocument doc=XDocument.Parse(“1234”);
//抓取第一个测试节点(如果有其他搜索条件,请更改谓词)
var elTest=doc.subjects().First(d=>d.Name==“Test”);
//仅当您在设计时不知道结构时才需要复制节点
XElement el=新XElement(elTest);
el.元素(“ID”).Value=“5678”;
//注入新节点
elTest.addafterelf(el);
doc.Save(“After.xml”);

下面是一个使用
System.Xml.Linq.XDocument
的示例,这是一个比
XmlDocument
简单得多的API:

//You can also use Load(), this is just so I didn't have to make a file
XDocument doc = XDocument.Parse("<Toolings><Testing><Test><ID>1234</ID></Test></Testing></Toolings>");

//Grab the first Test node (change the predicate if you have other search criteria)
var elTest = doc.Descendants().First(d => d.Name == "Test");

//Copy the node, only necessary if you don't know the structure at design time
XElement el = new XElement(elTest);

el.Element("ID").Value = "5678";

//inject new node 
elTest.AddAfterSelf(el);

doc.Save("After.xml");
//您也可以使用Load(),这样我就不必创建文件了
XDocument doc=XDocument.Parse(“1234”);
//抓取第一个测试节点(如果有其他搜索条件,请更改谓词)
var elTest=doc.subjects().First(d=>d.Name==“Test”);
//仅当您在设计时不知道结构时才需要复制节点
XElement el=新XElement(elTest);
el.元素(“ID”).Value=“5678”;
//注入新节点
elTest.addafterelf(el);
doc.Save(“After.xml”);

您是说“之前”是正确的吗?因为“之后”更有意义。最后,我想要“之后”一个。所以“之后”是正确的,明白了。但是,您真的希望“测试”增加吗?测试1、测试2等等。。?这样做会使你的数据消耗变得复杂,它们都应该是“测试”。是的,你是对的!当他们都称之为“测试”时,这就足够了。没有增量。你是说“之前”是正确的吗?因为“之后”更有意义。最后,我想要“之后”一个。所以“之后”是正确的,明白了。但是,您真的希望“测试”增加吗?测试1、测试2等等。。?这样做会使你的数据消耗变得复杂,它们都应该是“测试”。是的,你是对的!当他们都称之为“测试”时,这就足够了。没有增量。感谢您的解决方案,它可以工作!!;)但是,如果我没有确切的号码,我怎么能搜索ID呢?因此,我在ID中有一个随机数,如何才能找到正确的位置?如果您的意思是希望新节点位于底部,那么只需使用
Last()
而不是
First(d=>d……)
。如果您需要搜索一个节点,那么您必须了解所有节点独有的信息。感谢您的解决方案,它很有效!!;)但是,如果我没有确切的号码,我怎么能搜索ID呢?因此,我在ID中有一个随机数,如何才能找到正确的位置?如果您的意思是希望新节点位于底部,那么只需使用
Last()
而不是
First(d=>d……)
。如果您需要搜索一个节点,那么您必须了解所有节点所独有的一些信息。