这似乎是一个简单的解决方案,但我无法解决这个问题。
我有一系列元素,这些元素由<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.7/Rx.js"></script>
<input type="text" id="input1">
<input type="text" id="input2">
<input type="text" id="input3">
<p>Combined value: <span></span></p>
和&lt; <p>
以及一些p class="example">
混合而成。
我想做的就是保留一切干净的<p><strong>...</strong></p>
标签(包括标签和它的字符串)。
我目前使用的是我想要的大部分内容,但我似乎无法摆脱<p>
<p><strong>...</strong></p>
基本上我想删除整个@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 我拥有的HTML示例,以及我想要的内容。对困惑感到抱歉!
<p></p>
我只想要干净的<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>
标签及其内容,其余的元素都可以删除。
<p>
答案 0 :(得分:0)
如果您要删除其中包含元素的<p>
代码,您只需检查他们是否有任何包含以下代码的子代:
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();
}
}
我不确定我是否理解您对使用属性删除标记的要求,但是应该注意删除包含其中元素的标记。
答案 1 :(得分:0)
问题不在于我是如何解析HTML的,问题是我对从jsoup
对象调用时remove
如何处理Element
缺乏了解。它不会像我期望的那样将它从集合中删除,但它会将其从Document
中删除。
正如您在问题中的代码中所看到的,我正在使用删除操作的结果来构建一个字符串,当然它将包含我不想要的元素,即使它们已从{ {1}}。
最终的工作解决方案(仍然是凌乱的)看起来像
Document
我发现非常有用的信息是this SO post,其中解释了删除操作。
如果有人有问题,仍然喜欢听到更好的解决方案!