这似乎是一个简单的解决方案,但我一辈子都无法解决。
我有一个由< code >混合组成的元素集合
我想做的就是保留所有东西(包括标签和它的字符串),这是一个干净的
我现在使用的大部分都是我想要的,但我似乎真的无法摆脱
@Override
public String fetchContent(String url) throws IOException {
Document document = Jsoup.connect(url).get();
Element body = document.select("article.story_landing").first();
Elements elements = body.select("p:not([class])").select("p:not([id])");
StringBuilder stringBuilder = new StringBuilder();
for (Node child : elements) {
if (child.attributes().size() <= 1) {
stringBuilder.append(child.toString());
}
}
return stringBuilder.toString();
}
基本上,我想删除整个<代码>
有什么简单的方法吗?
干杯
编辑#1一个超文本标记语言的例子,说明我有什么,以及我想要回什么。抱歉混淆了!
<div class="item-body">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac eleifend risus.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac eleifend risus.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac eleifend risus.</p>
<p><strong>LOREM IPSUM:<br> *
<a href="https://example.com"
title="">Some random link</a><br> *
<a href="https://example.com"
title="">Some random link</a><br> *
<a href="https://example.com"
title="">Some random link</a><br> *
<a href="https://example.com"
title="">Some random link</a><br> *
</strong>
</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac eleifend risus.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac eleifend risus.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac eleifend risus.</p>
<p><a class="some_class" href="http://example.com">Some rando link</a></p>
<p><a class="some_class" href="http://example.com">Some rando link</a></p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac eleifend risus.</p>
</div>
我只想要干净的<代码>
<div class="item-body">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac eleifend risus.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac eleifend risus.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac eleifend risus.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac eleifend risus.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac eleifend risus.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac eleifend risus.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac eleifend risus.</p>
</div>
问题不在于我如何解析 HTML,问题在于我对从 Element
对象调用 jsoup
如何处理删除
缺乏了解。它不会像我预期的那样将其从集合中删除,但它确实会将其从文档中
删除。
正如您在问题中的代码中看到的那样,我正在使用删除操作的结果来构建一个字符串,该字符串当然会包含我不想要的元素,即使它们已从文档中
删除。
最终的工作解决方案(仍然很乱)看起来像
public String fetchContent(String url) throws IOException {
StringBuilder stringBuilder = new StringBuilder();
Document document = Jsoup.connect(url).get();
Element body = document.select("article.story_landing").first();
Elements elements = body.getElementsByTag("p");
for (int i = 0; i <= elements.size(); i++) {
if (elements.get(i).children().size() != 0) {
elements.remove(i);
}
}
for (Node child : elements) {
if (child.attributes().size() <= 1) {
stringBuilder.append(child.toString());
}
}
return stringBuilder.toString();
}
我发现非常有帮助的信息是这篇SO帖子,其中解释了移除操作。
如果有人有更好的问题解决方案,仍然喜欢听到更好的解决方案!
如果您想删除< code >
Elements allPTags = doc.getElementsByTag("p");
for(Element p : allPTags){
// If size() isn't 0 it means that the p tag has children elements so
// remove it from the from the document.
if(p.children().size() != 0){
p.remove();
}
}
我不确定我是否理解您对于移除带有属性的标签的要求,但是这应该可以移除带有元素的标签。
问题内容: 我正在尝试使用Jsoup删除HTML页面的标签之间的所有文本 例如,如果输入的HTML是 输出应为 基本上,我想删除由返回的内容 我发现有很多帖子是相反的,只保留文本,而没有什么可以解决我的问题。有关如何执行此操作的任何想法? 编辑 maverick9999提出的解决方案将解决大多数情况。 但是,正如注释中所注意到的,此解决方案还将删除嵌套标签。 举个例子: 将在输出中删除一个div:
什么是正确的方法来删除只有HTML标签(保留所有自定义/未知的标签)与JSOUP(不是正则表达式)? 预期输入: 预期产出: 我尝试使用白名单清洁剂。none(),但它也会删除自定义标记。 我也尝试过: 但是它也删除了自定义标签。 这个答案对我不好,因为自定义标记的数量是无限的。
我正在尝试使用 Jsoup 删除 HTML 页面标记之间的所有文本 例如,如果输入HTML是 输出应该是 基本上,我想删除返回的内容。 我找到了很多相反的帖子,只保留文本,但没有解决我的问题。知道怎么做吗? 编辑 maverick9999:https://stackoverflow.com/a/24292349/3589481提出的解决方案将解决大部分情况。 然而,正如评论中提到的,这个解决方案也
假设我有一个像这样的html片段: 我想从中得到的是: 所以我的问题是:如何从html中去掉所有包装标签,只得到与html中相同顺序的文本?正如您在标题中看到的,我想使用jsoup进行解析。 重音html示例(请注意“á”字符): 我想要的是: 这个html不是静态的,一般来说,我只是想解码人类可读形式的通用html片段的每一个文本,宽度线中断。
我必须解析一些html并移除锚标记,但我需要保留锚标记的innerHTML 例如,如果我的html文本是: 现在我可以解析上面的html并在jsoup中选择如下所示的标记, 我可以通过, 但是它会从开始括号到结束括号删除完整的achor标记,并且内部html会丢失,如何才能保留只删除开始和结束标记的内部html。 另外,请注意:我知道有从元素中获取outerHTML()和innerHTML()的方
我想清除所有筛选规则,但保留筛选本身。 有没有直接快速的方法去做呢? 我找到的代码是: 它获取筛选器对象,我对筛选器#的选项数量是有限的。 注意:删除此筛选器,但我需要保留它。