Java 使用jsoup解析html并删除标记块
我想删除标签之间的所有内容。示例输入可以是 输入:Java 使用jsoup解析html并删除标记块,java,jsoup,Java,Jsoup,我想删除标签之间的所有内容。示例输入可以是 输入: <body> start <div> delete from below <div class="XYZ"> first div having this class <div> waste </div> <div class="XYZ"> second div havin
<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>
开始
从下面删除
删除至上文
这也将继续存在
结束
基本上,对于第一次出现的
谢谢,请尝试以下代码:
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);
字符串数据=null;
BufferedReader br=新的BufferedReader(新的文件阅读器(“e://XMLFile.xml”);
StringBuilder=新的StringBuilder();
而((data=br.readLine())!=null){
附加(数据);
}
System.out.println(生成器);
String replaceAll=builder.toString().replaceAll(“您最好迭代找到的所有元素。这样您就可以
- a、 )所有元件均已移除,并且
- b、 )如果没有元素,就什么也做不了
示例:
Document doc = ...
for( Element element : doc.select("div.XYZ") )
{
element.remove();
}
编辑:
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.
*/
}
昨天我问了这个问题,多亏了奥利的回答,问题解决了。
上面的问题有一个扩展。我不知道我是否必须开始一个新的帖子或链接这个帖子。所以,在这种混乱中,我将它链接在这里。管理员们,请原谅,如果我必须为这个单独的帖子
在上面的问题中,我必须删除带有匹配组件的标记块
实际情况是:
它应该移除带有匹配组件的标记块,并移除其周围的
参考上面的例子
<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>
谢谢,
谢哈尔这可能对你有帮助
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();
到目前为止,您做了什么?我在Jsoup选择器中找到了答案。解决方案类似于:Document doc=Jsoup.parse(html);doc.select(“div.XYZ”).first().remove();return doc.body().outerHtml();但这里有一个问题,当我运行此程序时,它为包含
的html字符串提供了正确答案,但如果输入html字符串中不存在
,它将返回java.lang.NullPointerException
。我是否需要检查所有内容并仅在找到该类型的div时执行该步骤?谢谢。我无法回答我的问题n问题???AWWWWN不可以。但你可以将你的解决方案作为答案发布,然后接受它(请参阅:)。如果你的问题得到解决,请这样做。你可以轻松地使用Jsoup。一般来说,最好不要使用正则表达式,而是使用html库(如Jsoup)@奥利奥:谢谢你提供的信息。我不知道Jsoup。@Ankur.谢谢,但我在评论中给出了使用Jsoup的解决方案。Document doc=Jsoup.parse(html);doc.select(“div.XYZ”).first().remove();return doc.body().outerHtml();谢谢奥利奥…我用doc.select(“div.XYZ”).first.remove()完成了它;并将其保存在try块中,如果捕获到异常(这意味着缺少必需字段),它将返回原始字符串。这样就解决了问题。但您的方法更好。不要对此使用异常处理-简单的空检查更好。再次感谢@ollo…您的解决方案为我提供了另一个问题的解决方案。我必须检查html标记的特定owntext并将其删除。我不知道至少,您可以在对每个循环进行迭代时删除元素,这很方便。谢谢……请参阅我的编辑。顺便说一句。您是对的;使用循环更好,因为如果没有元素(first()
则抛出NullPointerException
)。得到了解决方案,您可以使用[][]和属性条件。虽然ORI使用逗号,但这与公认的答案之间有什么区别吗?提到的角落案例OP似乎也包括在内。
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();