【问题标题】:LINQ: add child element inside an elementLINQ:在元素内添加子元素
【发布时间】:2017-11-22 16:15:28
【问题描述】:

我知道以前有很多类似的相关问题 例如here

但我无法解决一个简单的问题。

这是一个例子

        int id = 1;
        var doc = new XDocument(new XDeclaration("1.0","utf-8","yes"));
        doc.Add(new XElement("root", new XAttribute("Version", "1.1.0")));
        doc.Root.Add(new XElement("subroot", new XAttribute("ID", id)));
        Console.WriteLine(doc);

这会产生以下结果

到这里为止一切顺利。 现在我想在 subroot 中添加新的子元素。

这是我尝试过的

        doc.Element("subroot").Add(new XElement("InsideSubroot"), new XAttribute("name","xyz"));

然而,这会引发异常,说对象引用未设置为对象的实例。

另一个尝试是

    doc.Elements("subroot").Single(x=> (int) x.Attribute("ID") == id).Add(new XElement("InsideSubroot"), new XAttribute("name","xyz"));

这表示找不到匹配的元素。

有人可以解释发生了什么以及为什么我会收到这些错误。 以及如何添加子元素。在我的情况下,在子根元素内

【问题讨论】:

  • 根目录呢? doc.Root.Elements(...)?
  • 这行得通吗? Document.Root.Element("subroot").Add(new XElement("InsideSubroot"), new XAttribute("name","xyz"));

标签: c# linq linq-to-xml


【解决方案1】:

subroot 不是文档的直接子级。你应该改用Descendents

doc
    .Descendants("subroot")
    .Single(x => (int)x.Attribute("ID") == id)
    .Add(new XElement("InsideSubroot"), new XAttribute("name","xyz"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 2023-03-11
    • 1970-01-01
    • 2013-03-19
    • 2021-05-13
    • 1970-01-01
    相关资源
    最近更新 更多