最近做项目需要在java里面解析html标签,听人说jsoup好用,就用了下。
网上搜了下用法,发现都是复制粘贴,就打算自己总结一个。
我当时maven的最新包
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.11.2</version> </dependency>
//所有的对象都是Jsoup包中的。 Document doc = Jsoup.parse("HTML字符串");//html转换成document Elements img = doc.select("img[src^=http://baidu.com]");//使用过滤器获取想要的标签集合 for (int i = 0; i < img.size(); i++) {//遍历标签集合 Element node = elements.get(i);//获取每一个标签 String src = node.attr("src");//获取属性 node.attr("src","http://blog.csdn.net/hjgzj");//给属性赋值 } System.out.println(doc.toString());//打印修改后的HTML
代码中最重要的是过滤器,这个过滤器跟jQuery用法很像,我就对比总结了一下
功能 | jsoup用法 | jQuery用法 |
获取a标签 | "a" | $("a") |
获取class为url的a标签 | "a.url" | $("a[class=url]") |
获取src=http://abc.com的a标签 | "a[src=http://abc.com]" | $("a[src=http://abc.com]") |
获取src以http开头的的a标签 | "a[src^=http]" | |
获取src以http结尾的的a标签 | "a[src$=http]" | |
获取src以http在任意位置的的a标签 | "a[src*=http]" | |
获取id=tab的标签 | "#tab" | $("#tab") |
如果精通jQuery,那么知道上面这些就够了,你可以任意组合匹配你想要得到的标签。
[]是属性过滤器,你可以根据属性获取标签,如果需要同时满足多个属性的时候,就多写几个[]然后并列就可以了。
如:需要得到value=hello,type=text的input,那么把过滤器组合起来就可以了:"input[value=hello][type=text]"
选择器之间也可以加逗号",",表示或的关系。
如:需要得到value=hello,type=text的input或者src以/a开头的img,这样写就可以了"input[value=hello][type=text],img[src^=/a]",这种写法类似jQuery的$("#id1,#id2")
最常用的就是这几个:属性选择器:[attr=vla],类选择器:.class,标签选择器:input,ID选择器#ID:
还有其他的选择器,我看了下其实不太常用,就不写了,有兴趣看下http://www.open-open.com/jsoup/selector-syntax.htm