Jsoup只保留干净的<p>标签并删除其他所有内容

时间:2018-03-24 05:26:38

标签: java html jsoup

这似乎是一个简单的解决方案,但我无法解决这个问题。

我有一系列元素,这些元素由<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> *&nbsp; <a href="https://example.com" title="">Some random link</a><br> *&nbsp; <a href="https://example.com" title="">Some random link</a><br> *&nbsp; <a href="https://example.com" title="">Some random link</a><br> *&nbsp; <a href="https://example.com" title="">Some random link</a><br> *&nbsp; </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>

2 个答案:

答案 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,其中解释了删除操作。

如果有人有问题,仍然喜欢听到更好的解决方案!