【问题标题】:How do I add an XElement to a document, avoiding the "incorrectly structured document" error?如何将 XElement 添加到文档中,避免“文档结构不正确”错误?
【发布时间】:2010-01-21 17:35:34
【问题描述】:
        // Remove element with ID of 1
        var userIds = from user in document.Descendants("Id")
                       where user.Value == "1"
                       select user;

        userIds.Remove();

        SaveAndDisplay(document);

        // Add element back
        var newElement = new XElement("Id", "0", 
            new XElement("Balance", "3000"));
        document.Add(newElement);

        SaveAndDisplay(document);

添加元素后块是问题所在。当它进入添加状态时:

此操作将创建一个 文档结构不正确。

我犯了什么愚蠢的错误?

编辑:

是的,我读的是XDocument,而不是XElement。关于何时偏爱其中一个有什么建议吗?

【问题讨论】:

  • 附带说明,您的newElement 对象将Balance 节点存储为Id 的子节点。这与您预期的 XML 结构不匹配。
  • 你是对的,但你可以忽略 xml 结构,我认为它是必需的,但我可以添加任何内容。

标签: c# .net xml linq-to-xml


【解决方案1】:

您似乎正在尝试添加一个新元素作为文档根的子元素。如果是这样,那么您需要将您的 Add 语句更改为以下内容。

var newElement = new XElement("Id", "0", new XElement("Balanace", "3000"));
document.Root.Add(newElement);

直接添加到文档会添加另一个根元素,这违反了 XML 结构。

【讨论】:

    【解决方案2】:

    您实际上是在尝试添加这些对象不喜欢的新根元素。我假设document 是一个 XDocument?通过将其添加到根节点,将其进一步放置在根节点内。使用:

    document.Root.Add(newElement) 或 document.FirstNode.Add(newElement)

    【讨论】:

    • 更正确:if (document.Root.FirstNode != null) document.Root.FirstNode.AddAfterSelf(newElement); else document.Root.AddFirst(newElement);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    • 2019-07-14
    • 1970-01-01
    • 2013-06-13
    相关资源
    最近更新 更多