使用jsoup解析html并删除标记块

use*_*660 7 java jsoup

我想删除标签之间的所有内容.输入的示例可以是

输入:

<body>
  start
  <div>
    delete from below
    <div class="XYZ">
      first div having this class
      <div>
        waste
      </div>
      <div class="XYZ">
        second div having this class
      </div>
      waste
    </div>
    delete till above
  </div>
  <div>
    this will also remain
  </div>
  end
</body>
Run Code Online (Sandbox Code Playgroud)

输出将是:

<body>
  start
  <div>
    delete from below
    delete till above
  </div>
  <div>
    this will also remain
  </div>
  end
</body>
Run Code Online (Sandbox Code Playgroud)

基本上,我必须删除第一次出现的整个块 <div class="XYZ">

谢谢,

oll*_*llo 15

您最好迭代找到的所有元素.所以你可以这样

  • a.)删除所有元素
  • b.)如果没有元素,那就什么也没做.

例:

Document doc = ...

for( Element element : doc.select("div.XYZ") )
{
    element.remove();
}
Run Code Online (Sandbox Code Playgroud)

编辑:

(我的评论的补充)

在此处进行简单的零/范围检查时,请勿使用异常处理:

doc.select("div.XYZ").first().remove();
Run Code Online (Sandbox Code Playgroud)

代替:

Elements divs = doc.select("div.XYZ");

if( !divs.isEmpty() )
{
    /*
     * Here it's safe to call 'first()' since there at least one element.
     */
}
Run Code Online (Sandbox Code Playgroud)

  • *不要*为此使用异常处理 - 一个简单的*null检查*要好得多. (2认同)
  • 得到了解决方案,您可以使用[] []进行AND属性条件...虽然逗号用于OR (2认同)