如何将XElement插入现有的xml文件?

时间:2014-05-01 13:19:25

标签: c# xml linq xelement

我确实关注xml:

<Assembly>
  <Bench>
    <Typ>P1</Typ>
    <DUT>
       <A>6</A>
     </DUT>
  </Bench>
  <Bench>
    <Typ>P2</Typ>
     <DUT>
       <A>6</A>
     </DUT>
  </Bench>
</Assembly>

如何获得可以插入新DUT的&#39; P2&#39; -element?我尝试了以下代码,这给了我一个错误:

var xElement = xmlDoc.Element("Assembly")
                                .Elements("Bench")
                                .Where(item => item.Attribute("Typ").Value == "P2")
                                .FirstOrDefault();

xElement.AddAfterSelf(new XElement("DUT")); 

提前致谢

2 个答案:

答案 0 :(得分:3)

Typ是元素名称,不是属性。如果您想在第二个<DUT>下的现有<DUT>之后添加新的<Bench>元素,那么您尝试的代码的这一细微更改应该有效:

var xElement = xmlDoc.Element("Assembly")
                     .Elements("Bench")
                     .FirstOrDefault(item => item.Element("Typ").Value == "P2");

xElement.AddAfterSelf(new XElement("DUT")); 

答案 1 :(得分:1)

另一种做同样事情的方法,只是为了显示可用的选项。

XElement typ = xmlDoc.Descentants("Typ")
                     .FirstOrDefault(typ => ((string)typ) == "P2");

您可以使用与har07相同的AddAfterSelf,或.Parent.Add(),如果它在父级Bench的位置无关紧要。 Add会将其添加为最后一个元素。

typ.Parent.Add(new XElement("DUT"));