在 C# 中的现有 XDocument 中添加 Xelement
Add Xelement in existing XDocument in C#
我有 XML 的详细信息。我想复制整个 <Details>
节点并创建具有完全相同属性的更新 <Details>
节点。
我的 XML 看起来像这样:
<root>
<Details>
<A.EMPLID>0000177008</A.EMPLID>
<G.LAST_NAME>Huziak-Clark</G.LAST_NAME>
<G.FIRST_NAME>Tracy</G.FIRST_NAME>
</Details>
</root>
我想创建一个这样的新节点
<root>
<Details>
<A.EMPLID>0000177008</A.EMPLID>
<G.LAST_NAME>Huziak-Clark</G.LAST_NAME>
<G.FIRST_NAME>Tracy</G.FIRST_NAME>
</Details>
<Newdetails>
<Details>
<A.EMPLID>0000177008</A.EMPLID>
<G.LAST_NAME>Huziak-Clark</G.LAST_NAME>
<G.FIRST_NAME>Tracy</G.FIRST_NAME>
</Details>
</Newdetails>
</root>
我已经像这样使用了 XElement
,但它只是在 XDocument
中添加了 <NewDeatils/>
个节点,而不是剩余的节点。
foreach(XElement e in XDocument.Descendants("Details"))
{
XDocument.Root.Element.Add("NewDetails",XElement("Deatils");
}
如何 select 整个 XElement
并将其附加到 <Newdetails>
节点下?
谢谢!
首先,加载文件并获取所有名为 "Details" 的 Descendants
。
var file = @"XMLFile.xml";
var doc = XDocument.Load(file);
var details = doc.Root.Descendants().Where(x => x.Name == "Details");
这为您提供了 Details
个节点的集合,在您的示例文件中只有一个。
然后我将遍历它们,并为它们中的每一个创建一个名为 NewDetails
的新 XElemen
并将现有元素添加为子元素。
请注意,我在循环之前获取 details.Count()
并将其用作限制。如果你改为 foreach
,这将变成一个无限循环,所以要小心。
var count = details.Count();
for (var i = 0; i < count; i++)
{
var newDetails = new XElement("NewDetails");
newDetails.Add(details);
doc.Root.Add(newDetails);
}
保存以确认结果。
var fileNew = @"XMLFile2.xml";
doc.Save(fileNew);
添加节点前后的文件如下:
之前:
之后:
我有 XML 的详细信息。我想复制整个 <Details>
节点并创建具有完全相同属性的更新 <Details>
节点。
我的 XML 看起来像这样:
<root>
<Details>
<A.EMPLID>0000177008</A.EMPLID>
<G.LAST_NAME>Huziak-Clark</G.LAST_NAME>
<G.FIRST_NAME>Tracy</G.FIRST_NAME>
</Details>
</root>
我想创建一个这样的新节点
<root>
<Details>
<A.EMPLID>0000177008</A.EMPLID>
<G.LAST_NAME>Huziak-Clark</G.LAST_NAME>
<G.FIRST_NAME>Tracy</G.FIRST_NAME>
</Details>
<Newdetails>
<Details>
<A.EMPLID>0000177008</A.EMPLID>
<G.LAST_NAME>Huziak-Clark</G.LAST_NAME>
<G.FIRST_NAME>Tracy</G.FIRST_NAME>
</Details>
</Newdetails>
</root>
我已经像这样使用了 XElement
,但它只是在 XDocument
中添加了 <NewDeatils/>
个节点,而不是剩余的节点。
foreach(XElement e in XDocument.Descendants("Details"))
{
XDocument.Root.Element.Add("NewDetails",XElement("Deatils");
}
如何 select 整个 XElement
并将其附加到 <Newdetails>
节点下?
谢谢!
首先,加载文件并获取所有名为 "Details" 的 Descendants
。
var file = @"XMLFile.xml";
var doc = XDocument.Load(file);
var details = doc.Root.Descendants().Where(x => x.Name == "Details");
这为您提供了 Details
个节点的集合,在您的示例文件中只有一个。
然后我将遍历它们,并为它们中的每一个创建一个名为 NewDetails
的新 XElemen
并将现有元素添加为子元素。
请注意,我在循环之前获取 details.Count()
并将其用作限制。如果你改为 foreach
,这将变成一个无限循环,所以要小心。
var count = details.Count();
for (var i = 0; i < count; i++)
{
var newDetails = new XElement("NewDetails");
newDetails.Add(details);
doc.Root.Add(newDetails);
}
保存以确认结果。
var fileNew = @"XMLFile2.xml";
doc.Save(fileNew);
添加节点前后的文件如下: