我想获取特定标记之后的所有HTML标记。例如:
<html>
<body>
<p>one</p>
<u><p>Two</p></u>
<b><p>Three</p></b>
<p>Four</p>
<table>
<tr><td>Five</td></tr>
<tr><td>Six</td></tr>
</table>
</body>
</html>
我想要使用Nokogiri <u><p>Two</p></u>
之后的所有HTML标记。
我的结果应该是:
<b><p>Three</p></b>
<p>Four</p>
<table>
<tr><td>Five</td></tr>
<tr><td>Six</td></tr>
</table>
答案 0 :(得分:1)
following-sibling
XPath axis就是你想要的。您的示例不是有效的HTML,Nokogiri会在解析为HTML时更改它,因此难以使用它进行演示,但使用类似的代码:
<html>
<body>
<p>one</p>
<p>Two</p>
<p>Three</p>
<p>Four</p>
<table>
<tr><td>Five</td></tr>
<tr><td>Six</td></tr>
</table>
</body>
</html>
这个XPath表达式:
//p[.="Two"]/following-sibling::*
将选择此项:
<p>Three</p>
<p>Four</p>
<table>
<tr><td>Five</td></tr>
<tr><td>Six</td></tr>
</table>
您可能希望使用node()
而不是*
,这将选择所有文本节点和元素(包括仅空白节点):
<p>Three</p>
<p>Four</p>
<table>
<tr><td>Five</td></tr>
<tr><td>Six</td></tr>
</table>
(如果你这样做的话,每行会有更多的前导空格,我已经把它删除了。)