如何使用xpath检索节点的特定第X个位置?

时间:2011-09-23 04:56:00

标签: xml linq xpath

这是我的Xml文档。

<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。

的文本

我如何得到它?

2 个答案:

答案 0 :(得分:3)

您可以使用[]括号索引到XPath表达式。例如,您可以使用//w:p[7]来访问第7个元素。

请注意,XPath索引是基于1的索引,而不是基于0的索引。

答案 1 :(得分: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>