如何使用JSoup仅删除两个不同标签之间的文本

时间:2018-04-21 20:50:03

标签: java jsoup

<div class="orcl6w2">
  <div class="orcl6w3">
    <table >
      <tbody>
        <tr>
          <td>
            <table>
              <tbody>
                <tr>
                  <td>
                    <center>
                      <strong>As Published In </strong>                                      
                    </center>
                  </td>
                </tr>
              </tbody>
            </table>
            <h2>DEVELOPER: PL/SQL Practices</h2>
            <hr />
            <strong>Steven Feuerstein </strong>This has to be deleted                                                        
            <em>Oracle PL/SQL Programming</em>This has to be deleted too.                                                             
          </td>
        </tr>
      </tbody>
    </table>
  </div>
</div>

在这里,我想删除文本以及hr标记后的标记。即,

<hr />
<strong>Steven Feuerstein </strong>This has to be deleted                                                        
<em>Oracle PL/SQL Programming</em>This has to be deleted too.

我尝试使用以下代码删除。但只有以下代码,我才能删除hr标记之后的标记。但是我无法删除文本,即This has to be deletedThis has to be deleted too.

if (elements.select("hr").size() > 0) {
    final Element hrfound = elements.select("hr").last();
    final int hrIdx = hrfound.siblingIndex();

    for (Element e : hrfound.siblingElements()) {
        if (e.siblingIndex() > hrIdx) {
            e.remove();
        }
    }
} 

请帮忙......

1 个答案:

答案 0 :(得分:0)

您使用的方法(hrfound.siblingElements())仅获取Element个对象,但您尝试删除的文本也属于Node类型。我也不会尝试使用索引删除它们。相反,在找到hr元素之后,您可以使用nextSibling()方法获取之后的兄弟姐妹;它将选择类型Node,因此它将同时获取元素和文本节点。

以下代码应该完成您要执行的操作:

while(hrfound.nextSibling() != null) {
    hrfound.nextSibling().remove();
}