我有一个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
。我在这里做错了什么?
答案 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
是否为空?