在xml中一次添加多个节点

时间:2011-10-27 14:27:45

标签: c# xml nullreferenceexception

我的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引用异常。为什么呢?

1 个答案:

答案 0 :(得分:2)

由于XDocument的根目录是<Settings>且根本身不是<Properties>,因此您从null获得Element("Properties")值。

您需要使用XDocument.Root或一连串调用ElementDescendants向下钻取。以下是一些选项:

// 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(...);