jsoup select 通过属性选择器选择内容,索引值选择

jsoup属性选择器跟jquery的写法一致。

1.在 QueryParser类中有定义的属性匹配规则 private static final String[] AttributeEvals = new String[]{"=", "!=", "^=", "$=", "*=", "~="}

调用select方法的时候,写法还是有点区别的

select("body > div[class*='top']")

在匹配的时候,"=", "!=", "^=", "$=", "*=", 会忽略[class*='xx']中的单引号或者反斜杠,也就是可以正确匹配

public abstract static class AttributeKeyPair extends Evaluator {
        String key;
        String value;


        public AttributeKeyPair(String key, String value) {
            Validate.notEmpty(key);
            Validate.notEmpty(value);


            this.key = key.trim().toLowerCase();
            if (value.startsWith("\"") && value.endsWith("\"")
                    || value.startsWith("'") && value.endsWith("'")) {
                value = value.substring(1, value.length()-1);
            }
            this.value = value.trim().toLowerCase();
        }
    }

只有"~=",不会忽略[class~=‘xx’]中的单引号或者反斜杠。再用它写正则表达式的时候一定要注意不要多写单引号。

 public AttributeWithValueMatching(String key, Pattern pattern) {
            this.key = key.trim().toLowerCase();
            this.pattern = pattern;
        }

2.Jsoup中的:lt(),:gt(),:eq(),:nth-child()等通过索引来选取元素,索引值都是它所在同级元素中索引位置,只有nth-child索引从1开始,其他的从0开始

以EQ的源码为示例:

public static final class IndexEquals extends IndexEvaluator {
        public IndexEquals(int index) {
            super(index);
        }


        @Override
        public boolean matches(Element root, Element element) {
            return element.elementSiblingIndex() == index;
        }


        @Override
        public String toString() {
            return String.format(":eq(%d)", index);
        }


    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jsoup库提供了一种类似于CSS选择器的选择器语法,用于选择HTML文档中的元素。以下是一些常见的选择器语法: 1. 标签选择器:使用标签名称选择元素,例如 `doc.select("div")` 会返回所有 `div` 元素。 2. 类选择器:使用 `.` 后跟类名选择元素,例如 `doc.select(".class-name")` 会返回所有 `class` 属性为 `class-name` 的元素。 3. ID选择器:使用 `#` 后跟元素ID选择元素,例如 `doc.select("#element-id")` 会返回具有 `id` 属性为 `element-id` 的元素。 4. 属性选择器:使用方括号 `[]` 包含属性名称和可选的属性选择元素,例如 `doc.select("[href]")` 会返回所有具有 `href` 属性的元素,`doc.select("[href=example.com]")` 会返回所有 `href` 属性为 `example.com` 的元素。 5. 子元素选择器:使用 `>` 选择直接子元素,例如 `doc.select("div > p")` 会返回所有 `div` 元素下的直接子元素 `p`。 6. 后代元素选择器:使用空格选择后代元素,例如 `doc.select("div p")` 会返回所有 `div` 元素下的后代元素 `p`。 7. 兄弟元素选择器:使用 `~` 选择同级别的兄弟元素,例如 `doc.select("div ~ p")` 会返回所有与 `div` 元素同级别的 `p` 元素。 8. 相邻兄弟元素选择器:使用 `+` 选择同级别的相邻兄弟元素,例如 `doc.select("div + p")` 会返回紧接在 `div` 元素后面的 `p` 元素。 9. 伪类选择器:使用 `:` 加上伪类名称选择元素,例如 `doc.select("a:visited")` 会返回所有已访问的 `a` 元素。 以上是常见的选择器语法,你可以根据需要使用它们来选择HTML文档中的元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值