2011-09-23 68 views
1

這是我的XML文檔。如何使用XPath檢索特定的X個節點的位置?

<w:document> 
<w:body> 
    <w:p>para1</w:p> 
    <w:p>para2</w:p> 
    <w:p>para3</w:p> 
    <w:p>para4</w:p> 
    <w:p>para5</w:p> 
    <w:p>para6</w:p> 
    <w:p>para7</w:p> 
    <w:p>para8</w:p> 
    <w:p>para9</w:p> 
    <w:p>para10</w:p> 
</w:body> 
</w:document> 

現在,我想檢索第7個.ie,Para7的文本。

我如何獲得呢?

回答

3

您可以索引使用[]括號中的XPath表達式。例如,您可以使用//w:p[7]訪問第7個元素。

請注意,XPath索引不爲0的基於基於1的索引的索引。

+0

錯誤答案!實際上,根據XML文檔,'someName [7]'可以選擇任意數量的元素,甚至什麼也不是,即使someName元素的總數遠遠超過7。 –

+0

@DimitreNovatchev,答案的目的是爲了證明對XPath的索引語法。另外,由於它取決於XML和用戶的具體要求,所以我很難將其稱爲錯誤的答案。 –

+0

@_Shane S. Anderson:這不僅是一個錯誤的答案 - 它是有害的,因爲它會影響人們相信''someName [k]'是在文檔中選擇第k個'someName'元素的正確方法。我們不應該允許這樣的虛假信息。 **請考慮儘快糾正或刪除此「答案」**。 –

0

使用

/*/*/*[7]/text() 

如果您與XPath引擎的API正確註冊的命名空間,你可以使用:

/w:document/w:body/w:p[7]/text() 

注意

注意使用[]運算符與一起出現問題僞運營商:在這種特定的情況下,簡單的表達

//w:p[7] 

選擇想要的元素,但在總體上選擇w:p元素是7日(按文檔順序)w:p孩子其父的。

所以,當對這個文件評價:

<w:document xmlns:w="w:w"> 
    <w:body> 
    <a> 
     <w:p>para1</w:p> 
     <w:p>para2</w:p> 
     <w:p>para3</w:p> 
    </a> 
    <b> 
     <w:p>para4</w:p> 
     <w:p>para5</w:p> 
     <w:p>para6</w:p> 
     <w:p>para7</w:p> 
     <w:p>para8</w:p> 
     <w:p>para9</w:p> 
     </b> 
     <w:p>para10</w:p> 
    </w:body> 
</w:document> 

表達//w:p[7]選擇什麼

然而,當對這個文件評價:

<w:document xmlns:w="w:w"> 
    <w:body> 
    <a> 
     <w:p>para1</w:p> 
     <w:p>para2</w:p> 
     <w:p>para3</w:p> 
     <w:p>para4</w:p> 
     <w:p>para5</w:p> 
     <w:p>para6</w:p> 
     <w:p>para7</w:p> 
     <w:p>para8</w:p> 
    </a> 
    <b> 
     <w:p>para9</w:p> 
     <w:p>para10</w:p> 
     <w:p>para11</w:p> 
     <w:p>para12</w:p> 
     <w:p>para13</w:p> 
     <w:p>para14</w:p> 
     <w:p>para15</w:p> 
    </b> 
</w:body> 
</w:document> 

同一表達式選擇

<w:p xmlns:w="w:w">para7</w:p> 
<w:p xmlns:w="w:w">para15</w:p> 
相關問題