【问题标题】:Find specific element position in XPath after checking a condition检查条件后在 XPath 中查找特定元素位置
【发布时间】:2016-06-17 11:37:51
【问题描述】:

我正在使用以下 html:(这里有一部分)

<table class="detailTable">
  <tbody>
    <tr>
      <td class="detailTitle" align="top">
        <h3>Credit Limit:</h3>
        <h3>Current Balance:</h3>
        <h3>Pending Balance:</h3>
        <h3>Available Credit:</h3>
      </td>
      <td align="top">
        <p>$677.77</p>
        <p>$7.77</p>
        <p>$7.77</p>
        <p>$677.77</p>
      </td>
      <td class="detailTitle">
        <h3>Last Statement Date:</h3>
        <h4>Payment Address</h4>
      </td>
      <td>
        <p>   05/19/2015  </p>
        <p class="attribution">
      </td>
    </tr>
  </tbody>
</table>

我需要先检查“Statement Date”是否存在,然后找到它的位置。然后获取它的值,它位于相应的&lt;p&gt; 标记中。我需要使用 XPath 来做到这一点。有什么建议吗?

到目前为止,我尝试使用//table[@class='detailTable'][1]//td[2]//p[position(td[contains(.,'Statement Date')])],但它不起作用。

【问题讨论】:

  • 您发现它不在您显示的 html 中?
  • 抱歉,这是一个错误@PadraicCunningham.. 已更正
  • 你使用什么语言?
  • @PadraicCunningham 我在 Java 代码中使用 xpath

标签: html xpath xpathquery


【解决方案1】:

这是一种可能的方式:(为便于阅读而格式化)

//table[@class='detailTable']
//tr
/td[*[contains(.,'Statement Date')]]
/following-sibling::td[1]
/*[position() 
      = 
    count(
        parent::td
        /preceding-sibling::td[1]
        /*[contains(.,'Statement Date')]/preceding-sibling::*
    )+1
  ]

解释:

  • ..../td[*[contains(.,'Statement Date')]] :从开始到这一部分,XPath 将找到 td 元素,其中至少有一个子元素包含文本 "Statement Date"
  • /following-sibling::td[1] :从之前匹配的td,导航到最近的以下兄弟td ...
  • /*[position() = count(parent::td/preceding-sibling::td[1]/*[contains(.,'Statement Date')]/preceding-sibling::*)+1] : ...并返回子元素的位置等于 包含文本的元素的位置 "Statement Date" 在前面的td。请注意,我们在这里使用count(preceding-sibling::*)+1 来获取包含文本"Statement Date" 的元素的位置索引。

【讨论】:

    【解决方案2】:

    你可以这样做:

    //table[@class='detailTable'][1]//td[@class="detailTitle" and contains(./h3, 'Statement Date')]/following-sibling::td[1]/p[1]/text()

    这将找到包含Statement Date 标题的&lt;td&gt;,并在其后立即获得&lt;td&gt;。然后获取&lt;td&gt;中第一个p的文本内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      相关资源
      最近更新 更多