2014-06-24 46 views
1

獲取XML節點我有一個XML:如何通過XPath的

<?xml version="1.0" encoding="utf-8" ?> 
<Root> 
    <Class> 
     <Room> 
      1 
     </Room> 
     <Subject> 
      English 
     </Subject> 
    </Class> 
    <Class> 
     <Room> 
      2 
     </Room> 
     <Subject> 
      Maths 
     </Subject> 
    </Class> 
</Root> 

我使用它作爲我的網格數據源,我已經使用的XmlDataSource和XPath爲。

PrimaryDataSource = new XmlDataSource(); 
PrimaryDataSource.EnableCaching = false; 
PrimaryDataSource.Data = ClassXML; 
return PrimaryDataSource; 

,並在訪問客戶端作爲節點: 的XPath( 「房間」)&的XPath( 「主題」)

這給了我那個特定屬性的值。

現在我想獲取整個XML根表格客戶端,只有一個Class根。

<Class> 
    <Room> 
     1 
    </Room> 
    <Subject> 
     English 
    </Subject> 
</Class> 

有人可以告訴我如何通過XPath或其他方法獲得它。

回答

1

如果你想第一個 「類」 只是使用:

(//Class)[1] 
1

由於只有一個根,你也可以使用XPath:

/Class 
0

您可以選擇所有類使用絕對XPath表達式:

/Root/Class 

後代軸表達,如:

//Class 

這將選擇包含所有類,它們的嵌套的影響無關(節點集是否存在Class元件更深層次結構中,它們也將被選擇在這種情況下。

有了這樣的一個由@ErezRobinson答案提出了位置謂詞,您可以根據自己的方面位置選擇的類。圓括號將它置於全球範圍內。 XPath表達式中的每個斜槓分隔步驟都提供了一個限制後續步驟或以下謂詞範圍的上下文。並且每個謂詞通過過濾出與其內部的布爾表達式不匹配的節點來減少節點集。 (//Class)[1](//Class)[position() = 1]的快捷方式

您也可以使用謂詞選擇與其子節點的值匹配的類。要選擇有子元素Room2值都Class元素,你可以使用:

//Class[Room = '2'] 

您還可以通過主題選擇:

//Class[Subject = 'Maths'] 

最後,一旦你有一個上下文中,您可以選擇該範圍內的其他元素。例如,你可以得到Room數時SubjectEnglish

//Class[Subject = 'English']/Room 

Class[Subject = 'English']步在這種情況下只是創建下一步,有效選擇節點或節點集上下文

+0

我已經嘗試過你的建議,但它不適合我。我想要的是:這個XML有一個ROOT名稱作爲Root,以及兩個子根Class [1]和Class [2],我想獲得一個Class根,我的意思是具有根「Class」的整個XML,我不感興趣只在元素的值我想要的整個部分的XML。 – BitsMax

+0

在這種情況下,@RoeiFinkelstein的答案應該可以解決您的問題。 – helderdarocha