【发布时间】:2014-11-25 23:27:13
【问题描述】:
我正在尝试从如下所示的表格中截取链接:
…
<table id="t">
<tr><td>Section 1</td></tr>
<tr><td>Some content</td></tr>
<tr><td>Some content</td></tr>
<tr><td>Some content</td></tr>
<tr><td>Some content</td></tr>
<tr><td><a href="some_link?for=one">View Report</a></td></tr>
<tr><td>Section 2</td></tr>
<tr><td>Some content</td></tr>
<tr><td>Some content</td></tr>
<tr><td>Some content</td></tr>
<tr><td>No report for section three</td></tr>
<tr><td>Some content</td></tr>
<tr><td>Section 3</td></tr>
<tr><td>Nothing for section four either.</td></tr>
<tr><td>Section 4</td></tr>
<tr><td>Some content</td></tr>
<tr><td>Some content</td></tr>
<tr><td><a href="some_link?for=four">View Report</a></td></tr>
<tr><td>Some content</td></tr>
</table>
…
共有三个部分,但它们在表格中以线性方式而不是分层方式表示。每个部分可能有零个或一个链接,其文本是“查看报告”。
我可以使用什么 XPath 来选择对应于 Section n 的 <a> 元素(如果不存在这样的元素,则为空集合)?
作为第一次剪辑,我考虑过
//table[@id='t']/tr[td='Section %d']/following-sibling::tr/td/a['View Report'][1]
(其中%d 是n 的占位符)。但是,这会错误地选择 n = 2 的最后一个链接。
我也可以试试
//table[@id='t']/tr[td='Section %d']/following-sibling::tr[following-sibling::tr/td='Section %d']/td/a['View Report'][1]
两个%d 占位符分别代表 n 和 n + 1,但这不适用于最后一部分。此外,需要两个插值是不优雅的。有什么好的解决方案可以处理所有情况吗?
【问题讨论】: