7

我想删除标签之间的所有内容。一个示例输入可能是

输入:

<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>

输出将是:

<body>
  start
  <div>
    delete from below
    delete till above
  </div>
  <div>
    this will also remain
  </div>
  end
</body>

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

谢谢,

4

4 回答 4

16

您最好遍历找到的所有元素。所以你可以放心

  • a.) 所有元素都被删除并且
  • b.) 如果没有元素,则什么都不做。

例子:

Document doc = ...

for( Element element : doc.select("div.XYZ") )
{
    element.remove();
}

编辑:

(对我的评论的补充)

当一个简单的空/范围检查就足够时,不要使用异常处理:

doc.select("div.XYZ").first().remove();

反而:

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

if( !divs.isEmpty() )
{
    /*
     * Here it's safe to call 'first()' since there at least one element.
     */
}
于 2013-04-03T19:18:12.287 回答
1

试试这个代码:

String data = null;
    BufferedReader br = new BufferedReader(new FileReader("e://XMLFile.xml"));
    StringBuilder builder = new StringBuilder();
    while ((data = br.readLine()) != null) {
        builder.append(data);
    }
    System.out.println(builder);
    String replaceAll = builder.toString().replaceAll("<div class=\"XYZ\".+?</div>", "");
    System.out.println(replaceAll);

我已经从文件中读取了输入 XML,并通过逐行读取将其存储在 StringBuilder 对象中,然后替换了整个标签将为空字符串。

于 2013-04-03T19:12:04.773 回答
1

这可能会对您有所帮助。

 String selectTags="div,li,p,ul,ol,span,table,tr,td,address,em";
 /*selecting some specific tags */
 Elements webContentElements = parsedDoc.select(selectTags); 
 String removeTags = "img,a,form"; 
 /*Removing some tags from selected elements*/
 webContentElements.select(removeTags).remove();
于 2017-10-19T10:34:14.723 回答
0

我昨天问了这个问题,感谢ollo的回答。解决了。有上述问题的延伸。我不知道我是否必须开始一个新帖子或链接这个。因此,在这种混乱中,我将其链接在这里.. 请管理员,如果我不得不为此单独发帖,请原谅我。

在上述问题中,我必须删除具有匹配组件的标签块。

真正的场景是:它应该删除带有匹配组件的标签块+删除<br />它周围。

参考上面的例子。

<body>
  start
  <div>
    delete from below
    <br />
    <br />
    <div class="XYZ">
      first div having this class
      <div>
        waste
      </div>
      <div class="XYZ">
        second div having this class
      </div>
      waste
    </div>
    <br />
    delete till above
  </div>
  <div>
    this will also remain
  </div>
  end
</body>

也应该给出相同的输出:

<body>
  start
  <div>
    delete from below
    delete till above
  </div>
  <div>
    this will also remain
  </div>
  end
</body>

因为它有<br />上面和下面的 html 标签块要删除....

只是为了重新迭代,我正在使用 ollo 给出的解决方案来匹配和删除标记块。

for( Element element : doc.select("div.XYZ") )
{
    element.remove();
}

谢谢,谢卡尔

于 2013-04-05T18:25:39.737 回答