2013-07-02 134 views
3

我有一個xml,我試圖讓一個特定的XName 的元素,因此我嘗試做這樣的事情......的XDocument元素返回null

XDocument doc = XDocument.Load("C://some.xml"); 
XDocument subDoc = new XDocument(doc.Elements("data")); 

但subdoc的不返回任何元素,我知道我有一個名爲data的元素,我也嘗試過使用名稱空間,但沒有返回任何元素。

我想知道如果我只能得到一個XDocument數據(包括)和他的孩子。

some.xml 

<chart xmlns="http://www.somenamespace.com"> 
    <data> 
    <table> 
     <columns> 
     <column id="001" label="A"/> 
     <column id="002" label="B"/> 
     <column id="003" label="C"/> 
     <column id="004" label="D"/> 
     </columns> 
     <rows> 
     <row> 
      <cell> 
      <float value="30"/> 
      </cell> 
      <cell> 
      <float value="35"/> 
      </cell> 
      <cell> 
      <float value="15"/> 
      </cell> 
      <cell> 
      <float value="18"/> 
      </cell> 
     </row> 
     </rows> 
    </table> 
    </data> 
<render /> 
</chart> 

有人可以幫忙嗎?

感謝

+5

請發佈_some.xml_文件的內容。 –

回答

7

的System.Linq的命名空間指令添加到文件的頂部:

using System.Linq; 

試試這個:

XDocument doc = XDocument.Load("c:\\some.xml"); 
XName name = XName.Get("data", doc.Root.GetDefaultNamespace().NamespaceName); 
XDocument subDoc = new XDocument(doc.Descendants(name).First()); 
+1

首先不存在於下降 –

1

你的直接元素節點很可能不是「數據」 ...嘗試後裔,而不是

doc.Descendants("data"); 
+0

也嘗試過,但沒有 –

+1

'data'在另一個命名空間,因此它不匹配任何元素。 – Caramiriel