如何从XElement对象访问子元素?

时间:2013-01-02 08:26:19

标签: c# xml linq-to-xml

我有一个XElement对象(元素),其中包含以下元素( 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。我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

当我按照你的设置编写代码时如下:

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是否为空?

相关问题