2013-01-02 59 views
0

我有一個的XElement對象(元件),其包含以下元素()在它:如何從XElement對象訪問子元素?

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

現在我想更換克元件的flowRoot元件。爲此,我嘗試過:

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

它給了我一個例外object reference not set to an instance of an object。我在這裏做錯了什麼?

+1

您可能需要檢查值==「1」,因爲Value是一個字符串類型,'1'是char類型。 – ryadavilli

+0

那麼,我的答案是否有幫助?你有沒有設法解決這個問題?請更新這個SO項目... –

回答

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'節點不是實際的根?

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

flowRoot空: 當你測試這樣的「flowRoot」元素您能得到什麼?