【问题标题】:How can I insert an XElement into an existing xml-file?如何将 XElement 插入现有的 xml 文件?
【发布时间】: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")); 

提前致谢

【问题讨论】:

  • 你遇到了什么错误?
  • @Andrew: xElement 为空
  • -> 我需要通过哪种方式更改查询?这个例子没有给我正确的解决方案。

标签: c# xml linq xelement


【解决方案1】:

Typ 是元素名称,而不是属性。如果您打算在第二个&lt;Bench&gt; 下的现有&lt;DUT&gt; 之后添加新的&lt;DUT&gt; 元素,那么对您尝试过的代码所做的微小更改应该可以工作:

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"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多