0

次の要素 ( g ) を含むXElement オブジェクト ( element ) があります。

<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 に答える