如何将 XElement 插入现有的 xml 文件?
Posted
技术标签:
【中文标题】如何将 XElement 插入现有的 xml 文件?【英文标题】:How can I insert an XElement into an existing xml-file? 【发布时间】:2014-06-17 23:31:20 【问题描述】:我确实有以下 xml:
<Assembly>
<Bench>
<Typ>P1</Typ>
<DUT>
<A>6</A>
</DUT>
</Bench>
<Bench>
<Typ>P2</Typ>
<DUT>
<A>6</A>
</DUT>
</Bench>
</Assembly>
如何获得对“P2”元素的引用以插入新的 DUT?我尝试了以下代码,这给了我一个错误:
var xElement = xmlDoc.Element("Assembly")
.Elements("Bench")
.Where(item => item.Attribute("Typ").Value == "P2")
.FirstOrDefault();
xElement.AddAfterSelf(new XElement("DUT"));
提前致谢
【问题讨论】:
你遇到了什么错误? 使用提到的链接***.com/questions/2131061/… @Andrew: xElement 为空 -> 我需要通过哪种方式更改查询?这个例子没有给我正确的解决方案。 【参考方案1】:Typ
是元素名称,而不是属性。如果您打算在第二个<Bench>
下的现有<DUT>
之后添加新的<DUT>
元素,那么对您尝试过的代码所做的微小更改应该可以工作:
var xElement = xmlDoc.Element("Assembly")
.Elements("Bench")
.FirstOrDefault(item => item.Element("Typ").Value == "P2");
xElement.AddAfterSelf(new XElement("DUT"));
【讨论】:
您可以通过将 lambda 合并到FirstOrDefault
调用中并删除 Where
来缩短它【参考方案2】:
做同样事情的另一种方式,只是为了显示可用的选项。
XElement typ = xmlDoc.Descentants("Typ")
.FirstOrDefault(typ => ((string)typ) == "P2");
您可以使用与 har07 相同的 AddAfterSelf
或 .Parent.Add()
,如果它在父工作台中的位置无关紧要。 Add
会将其添加为最后一个元素。
typ.Parent.Add(new XElement("DUT"));
【讨论】:
以上是关于如何将 XElement 插入现有的 xml 文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Dictionary<XElement,XElement> 转换为 xml 文件?
使用 XElement 保存 XML 文件时,文件中的对齐方式也会发生变化,如何避免?
如何将带有 xml 后代的 XElement 导入 SQL Server