2010-11-29 105 views
0

是否有某種xpath語法可用於獲取在xml中存在identifierref的所有節點(包括子節點)?我一直在嘗試類似XmlNodeList nodeList = xmlDoc.SelectNodes("//@identifierref");,但不會返回項目節點下方的子標題節點。理想情況下,我想獲得一個節點列表,該列表可以訪問具有標識符ref的項目節點以及其下方的標題節點。下面是我正在使用的XML。提前致謝。所有具有屬性的節點

<organization xmlns:adlcp="test1" xmlns="test2"> 
     <title>1.2 Tester</title> 
     <item identifier="C2_LESSON1"> 
     <title>TestName1</title> 
     <item identifier="I_SCO1" identifierref="SCO01"> 
      <title>Tester SCO 1</title> 
     </item> 
     </item> 
     <item identifier="C2_LESSON2"> 
     <title>TestName2</title> 
     <item identifier="I_SCO2" identifierref="SCO01"> 
      <title>Tester SCO 2</title> 
     </item> 
     </item> 
     <item identifier="C2_LESSON3"> 
     <title>TestName3</title> 
     <item identifier="I_SCO3" identifierref="SCO01"> 
      <title>Tester SCO 3</title> 
     </item> 
     </item> 
    </organization> 

回答

1

欲獲得具有 訪問具有 identifierref它們下面本和標題 節點的項節點

//item[@identifier] 

上述選擇所有item節點列表文檔中具有identifier屬性的元素。

如果您還想選擇title元素子元素。

//item[@identifier]|//item[@identifier]/title 

但是,節點設置結果順序取決於主機語言(最常用的文檔順序)。也沒有「分組」功能:你不能迭代每兩個,因爲可能有一些title丟失。

因此,首先使用第一XPath表達式,然後遍歷那些item獲得title與任何DOM方法或相對XPath表達式所示:

title 
+0

而不兩個絕對路徑的聯合另一種表示:`//* [(self :: item | self :: title/parent :: item)[@ identifier]]`但它並不短,可能不是更高效。 – 2010-11-29 23:03:31

相關問題