使用Jsoup下Elements的remove方法过滤元素

今天在过滤元素的时候尝试使用remove方法,发现踩到了一个蛮大的坑,需要注意一下。

待解析的html片段:

王XX
配偶
受益顺序
1
百分比
100

解析需求分析:
需要将里面除了“受益顺序”和“百分比”的其他4个字段信息提取出来,因为需要提取的字段的class属性值都没有统一的规律,所以并没有办法根据class属性值来提取,之前用的方法是按照下标来定位和获取元素,今天尝试下把不需要的去掉,只留下需要的。

第一版代码:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JsoupTest {

    public static void main(String[] args) {

        String html = "
\n" + "
王XX
\n" + "
配偶
\n" + "\t\t\t\t\t\t\t\t
受益顺序
\n" + "
1
\n" + "\t\t\t\t\t\t\t\t
百分比
\n" + "
100
\n" + "
"; Document document = Jsoup.parse(html); Elements elements = document.select("div[class=divRow]"); //将class属性为“mobileOnly”的元素去掉,把剩下的拿出来 elements = elements.first().children().select("div[div=mobileOnly]").remove(); for (Element element : elements) { System.out.println(element.html()); } } }

输出结果:

受益顺序
百分比

大家看到,这里留下来的反而是需要去掉的那两个元素……难道remove的意思不是把选择出来的那些元素去掉吗??只好去查阅Jsoup的官方文档。

找到Elements的remove方法解释:
使用Jsoup下Elements的remove方法过滤元素_第1张图片

好像跟我一开始理解的没有本质上的差别,都是将选中的元素移除掉。
那只好把remove方法反过来用了……

修改后的代码:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**
 * @Author zhihao_tan
 * @Date 2018/9/27 10:41
 * @Version 1.0
 */
public class JsoupTest {

    public static void main(String[] args) {

        String html = "
\n" + "
王XX
\n" + "
配偶
\n" + "\t\t\t\t\t\t\t\t
受益顺序
\n" + "
1
\n" + "\t\t\t\t\t\t\t\t
百分比
\n" + "
100
\n" + "
"; Document document = Jsoup.parse(html); Elements elements = document.select("div[class=divRow]"); //将选择器修改一下,变成查找与选择器不匹配的元素,这里意思是查找不包含class=mobileOnly的所有div列表 elements = elements.first().children().select("div:not(.mobileOnly)").remove(); for (Element element : elements) { System.out.println(element.html()); } } }

输出结果:

王XX
配偶
1
100

成功取出需要的那四个元素了,莫非remove方法真的要反着用??
不管怎样,以后使用remove方法的时候得非常的慎重,一定要经过谨慎的试验。

你可能感兴趣的:(Jsoup)