我有以下我正在使用的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>
我需要先检查&#34; Statement Date
&#34;存在,然后找到它的位置。然后获取相应<p>
标记中的值。我需要使用XPath来做到这一点。有什么建议吗?
到目前为止,我尝试使用//table[@class='detailTable'][1]//td[2]//p[position(td[contains(.,'Statement Date')])]
,但它不起作用。
答案 0 :(得分:1)
你可以这样做:
<td>
这将找到包含Statement Date
标题的<td>
,并在其后立即获得p
。然后,它会获取<td>
中第一个{{1}}的文本内容。
答案 1 :(得分: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"
的元素的位置1}}。请注意,我们使用td
来获取包含文本count(preceding-sibling::*)+1
的元素的位置索引。