【问题标题】:How to retrieve the particular X th position of node using xpath?如何使用 xpath 检索节点的特定 X 位置?
【发布时间】:2011-09-23 04:56:00
【问题描述】:

这是我的 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>

现在,我想检索 7th .ie,Para7 的文本。

我如何获得它?

【问题讨论】:

    标签: xml linq xpath


    【解决方案1】:

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

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

    【讨论】:

    • 错误答案!事实上,根据 XML 文档,//someName[7] 可以选择任意数量的元素,甚至什么都不选择——即使someName 元素的总数远远超过 7。-1。
    • @DimitreNovaatchev,答案的目的是演示 XPath 的索引语法。此外,由于它取决于 XML 和用户的具体要求,我几乎不会称其为错误答案。
    • @_Shane S. Anderson:这不仅是一个错误的答案——它是有害的,因为它会影响人们相信 //someName[k] 是选择第 k 个 someName 元素的正确方法文件。我们不应该允许这样的虚假信息。 请考虑尽快更正或删除此“答案”
    【解决方案2】:

    使用

    /*/*/*[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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多