【问题标题】:How to get all the nodes which are coming after a particular tag using Nokogiri如何使用 Nokogiri 获取特定标签之后的所有节点
【发布时间】:2015-02-16 02:32:39
【问题描述】:

我想获取特定标签之后的所有 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 在&lt;u&gt;&lt;p&gt;Two&lt;/p&gt;&lt;/u&gt; 之后的所有 HTML 标记。

我的结果应该是:

<b><p>Three</p></b>
<p>Four</p>
<table>
   <tr><td>Five</td></tr>
   <tr><td>Six</td></tr>
</table>

【问题讨论】:

  • &lt;u&gt;&lt;p&gt;Two&lt;/p&gt;&lt;/u&gt; 是无效的 HTML,Nokogiri 会在解析为 HTML 时将其更改为 &lt;u&gt;&lt;/u&gt;&lt;p&gt;Two&lt;/p&gt;&lt;b&gt;&lt;p&gt;Three&lt;/p&gt;&lt;/b&gt; 类似。

标签: ruby ruby-on-rails-4 xpath nokogiri


【解决方案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>

(如果你这样做,每行会有更多的前导空格,我在这里删除了它。)

【讨论】:

    猜你喜欢
    • 2021-05-18
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多