【问题标题】:How to access child elements from XElement object?如何从 XElement 对象访问子元素?
【发布时间】:2013-01-02 08:26:19
【问题描述】:

我有一个 XElement 对象(element),其中包含以下元素(g):

<g .....>
 <flowRoot id='1'></flowRoot>
 <path id='2'></path>
  ..  
  ...
</g>

现在我想替换 g 元素的 flowRoot 元素。为此我尝试了:

element
    .Descendants()
    .Single(g => g.Attribute("id").Value == '1')
    .ReplaceAll(newElement);

它给了我一个例外object reference not set to an instance of an object。我在这里做错了什么?

【问题讨论】:

  • 您可能需要检查 Value == "1",因为 Value 是字符串类型,而 '1' 是 char 类型。
  • 那么,我的回答有帮助吗?你设法解决了这个问题吗?请更新此 SO 项...

标签: c# xml linq-to-xml


【解决方案1】:

当我按照您的设置进行编码时:

XElement element = new XElement("g"
    , new XElement("flowRoot", new XAttribute("id", "1"))
    , new XElement("path", new XAttribute("id", "2"))
    );

XElement newElement = new XElement("flowRoot", new XAttribute("id", "678678"));

element.Descendants().Single(g => g.Attribute("id").Value == "1").ReplaceAll(newElement);

一切正常。我确实必须用 1 周围的双引号替换单引号,因为它不会编译(正如@ryadavilli 已经指出的那样)

我的猜测是您的“元素”与您认为的不同,也许“g”节点不是实际的根? 当您像这样测试“flowRoot”元素时会得到什么:

XElement flowRoot = element.Descendants("flowRoot").FirstOrDefault();

flowRoot 是否为空?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 2015-02-05
    • 2021-11-27
    • 2020-11-28
    • 1970-01-01
    • 2020-11-26
    相关资源
    最近更新 更多