0

我有一个 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。我在这里做错了什么?

4

1 回答 1

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空?

于 2013-01-02T08:54:03.677 回答