jsoup

来源:互联网 发布:java小写字母转大写 编辑:程序博客网 时间:2024/05/29 13:21

清单 3.

  File input = new File("D:\test.html");  Document doc = Jsoup.parse(input,"UTF-8","http://www.oschina.net/");  Elements links = doc.select("a[href]"); // 具有 href 属性的链接 Elements pngs = doc.select("img[src$=.png]");// 所有引用 png 图片的元素 Element masthead = doc.select("div.masthead").first();  // 找出定义了 class="masthead" 的元素 Elements resultLinks = doc.select("h3.r > a"); // direct a after h3 

 

这是 jsoup 真正让我折服的地方,jsoup 使用跟 jQuery 一模一样的选择器对元素进行检索,以上的检索方法如果换成是其他的 HTML 解释器,至少都需要很多行代码,而 jsoup 只需要一行代码即可完成。

jsoup 的选择器还支持表达式功能,我们将在最后一节介绍这个超强的选择器。

 

修改数据

在解析文档的同时,我们可能会需要对文档中的某些元素进行修改,例如我们可以为文档中的所有图片增加可点击链接、修改链接地址或者是修改文本等。

下面是一些简单的例子:


清单 4.

  doc.select("div.comments a").attr("rel", "nofollow");  // 为所有链接增加 rel=nofollow 属性 doc.select("div.comments a").addClass("mylinkclass");  // 为所有链接增加 class="mylinkclass" 属性 doc.select("img").removeAttr("onclick"); // 删除所有图片的 onclick 属性 doc.select("input[type=text]").val(""); // 清空所有文本输入框中的文本

 

道理很简单,你只需要利用 jsoup 的选择器找出元素,然后就可以通过以上的方法来进行修改,除了无法修改标签名外(可以删除后再插入新的元素),包括元素的属性和文本都可以修改。

修改完直接调用 Element(s) 的 html() 方法就可以获取修改完的 HTML 文档。

 

HTML 文档清理

jsoup 在提供强大的 API 同时,人性化方面也做得非常好。在做网站的时候,经常会提供用户评论的功能。有些用户比较淘气,会搞一些脚本到评论内容中,而这些脚本可能会破坏整个页面的行为,更严重的是获取一些机要信息,例如 XSS 跨站点攻击之类的。

jsoup 对这方面的支持非常强大,使用非常简单。看看下面这段代码:


清单 5.

  String unsafe = "<p><a href='http://www.oschina.net/' onclick='stealCookies()'>  开源中国社区 </a></p>";  String safe = Jsoup.clean(unsafe, Whitelist.basic());  // 输出 :  // <p><a href="http://www.oschina.net/" rel="nofollow"> 开源中国社区 </a></p> 

 

0 0
原创粉丝点击