c# - 在xml中一次添加多个节点

标签 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 作为 Properties 的子元素。这是我的代码:

XDocument xmlDoc1 = XDocument.Load(@"C:\Users\John\Desktop\FileXml.xml");
xmlDoc1.Element("Properties").Add(new XElement(addManyNodes));

但它不起作用。它抛出空引用异常。为什么?

最佳答案

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

关于c# - 在xml中一次添加多个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7917424/

相关文章:

c# - 无法覆盖 Azure Web App 中的服务器证书验证

c# - 如何使用 Moles 作为构造函数?

PHP simplexml_load_file - 捕获文件错误

azure - 部署到云时,未将对象引用设置为对象实例错误

c# - EF - 导航属性为空,即使在重新加载实体之后,但在程序重新启动时有效

c# - 返回 "System.Byte[]"而不是实际数据

c# - 如何将列表框中列出的产品数量直接减去到我的产品数据库中? (MySQL)

java - ant "customization is not associated with any schema element"的 xjc 错误

java - 为什么我会获得额外的文本节点作为根节点的子节点?

unity3d - unity Vuforia NullReferenceException