我的xml是这样的:
<Settings>
<Ss></Ss>
<Properties>
<Property>
<Name>x</Name>
<Description>xx</Description>
</Property>
<Property>
<Name>y</Name>
<Description>yyyyy</Description>
</Property>
</Properties>
</Settings>
我想添加一个属性为XElement的子。这是我的代码:
XDocument xmlDoc1 = XDocument.Load(@"C:\Users\John\Desktop\FileXml.xml");
xmlDoc1.Element("Properties").Add(new XElement(addManyNodes));
但它不起作用。它抛出null引用异常。为什么呢?
答案 0 :(得分:2)
由于XDocument的根目录是<Settings>
且根本身不是<Properties>
,因此您从null
获得Element("Properties")
值。
您需要使用XDocument.Root
或一连串调用Element
或Descendants
向下钻取。以下是一些选项:
// simplest
xmlDoc1.Root.Element("Properties").Add(new XElement(addManyNodes));
// using a chain of Element calls
xmlDoc1.Element("Settings").Element("Properties").Add(...);
另一种看待它的方式:
<!-- xmlDoc1 -->
<Settings> <!-- .Root or .Element("Settings") -->
<Ss></Ss> <!-- .Root.Element("Ss") or .Element("Settings").Element("Ss") -->
<Properties> <!-- .Root.Element("Properties") -->
<Property> <!-- .Root.Element("Properties").Element("Property") -->
最后一点,如果addManyNodes
已经是一个数组:
xmlDoc1.Root.Element("Properties").Add(addManyNodes);
完成更改后,you should save it to the file:
xmlDoc1.Save(...);