我的xpath: (// tr [td [contains(。,'车辆类型优化')]] [1] / follow-sibling :: tr / td / div / table / tr / td / font / ul / li / a < / p>
我的来源:
<tr><td><font color="White">Refine by Vehicle Types</font></td> </tr>
<tr><td><div>
<table> <tr> <td><font<ul><li><a> Automobile/Light Trucks</a></li></ul></font></td> </tr> </table>
</div></td> </tr>
<tr> <td></td> </tr>
<tr> <td><font>Refine by Category</font></td> </tr>
<tr> <td><div>
<table> <tr> <td><font><ul><li><a>Agricultural</a></li></ul></font></td></tr>
我正在尝试抓取此来源并在“按车辆类型优化”之后收集<li>
个节点,而不是在“按类别细化”之后收集。
任何帮助都是适当的。
答案 0 :(得分:1)
你快到了。
更改强>:
(//tr
[td[contains(., 'Refine by Vehicle Types')]]
)
[1]
/following-sibling::tr
/td/div/table
/tr/td/font
/ul/li/a
以强>:
(//tr
[td[contains(., 'Refine by Vehicle Types')]]
)
[1]
/following-sibling::tr[1]
/td/div/table
/tr/td/font
/ul/li/a
当针对以下XML文档评估第二个XPath表达式时(您严重格式错误的文本已更正为格式良好的XML文档):
<table>
<tr>
<td>
<font color="White">Refine by Vehicle Types</font>
</td>
</tr>
<tr>
<td>
<div>
<table>
<tr>
<td>
<font>
<ul>
<li>
<a> Automobile/Light Trucks</a>
</li>
</ul>
</font>
</td>
</tr>
</table>
</div>
</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td>
<font>Refine by Category</font>
</td>
</tr>
<tr>
<td>
<div>
<table>
<tr>
<td>
<font>
<ul>
<li><a>Agricultural</a></li>
</ul>
</font>
</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
只有一个 - 想要的 - a
元素被选中:
<a> Automobile/Light Trucks</a>
注意:我是否提到 XPath Visualizer 会对您有所帮助?
答案 1 :(得分:1)
对于强大的XPath,无论两个文本标签之间有多少tr / li元素都可以使用,请尝试:
(//tr
[td[contains(., 'Refine by Vehicle Types')]]
)[1]
/following-sibling::tr[not(preceding-sibling::tr
[contains(., 'Refine by Category')])]
/td/div/table
/tr/td/font
/ul/li/a
(借用@Dimitre的格式。)
上面的效率很低(可能是O(n ^ 2)),所以如果你有一个长页面,它可能会变慢。 但对于中等页面,应该没问题。