jsoup 是一款非常优秀的处理HTML的java工具,最大的特点就是拥有类似jquery的select操作。使用非常简单,但是最近本人在使用过程中,由于不熟悉踩了一个坑,记录已备忘。
代码如下:
public static void main(String[] args) {
String content = "<a href=\"test.html\" title=\"men tshirt\" >men tshirt</a>";
try {
Document document = Jsoup.parse(content);
Elements links = document.select("a");
for (Element link : links) {
link.attr("clickdata", "adfafgadsfaf");
if (!link.hasClass("click-target-with-quot")) {
link.addClass("click-target-with-quot");
}
}
System.out.println(document.html());// 错误代码
System.out.println(document.body().html());//正确代码
} catch (Exception e) {
}
}
需求也很简单,将一个HTML片段中的所有的<a>标签,增加一个class,和一个自定义属性。
代码中红色标注了错误和正确的代码,区别在于错误的代码会返回添加了<html>等头尾的标签。
<html> <head></head> <body> <a href="test.html" title="men tshirt" clickdata="adfafgadsfaf" class=" click-target-with-quot">men tshirt</a> </body> </html>
正确的如下:
<a href="test.html" title="men tshirt" clickdata="adfafgadsfaf" class=" click-target-with-quot">men tshirt</a>
原因在于:在 Jsoup.parse解析的时候在类HtmlTreeBuilderState类中会判断是否属于BeforeHtml,BeforeHead等等状态,如果满足的话会被强制添加<html>标签。
具体代码如下:
BeforeHtml { boolean process(Token t, HtmlTreeBuilder tb) { if (t.isDoctype()) { tb.error(this); return false; } else if (t.isComment()) { tb.insert(t.asComment()); } else if (isWhitespace(t)) { return true; // ignore whitespace } else if (t.isStartTag() && t.asStartTag().name().equals("html")) { tb.insert(t.asStartTag()); tb.transition(BeforeHead); } else if (t.isEndTag() && (StringUtil.in(t.asEndTag().name(), "head", "body", "html", "br"))) { return anythingElse(t, tb); } else if (t.isEndTag()) { tb.error(this); return false; } else { return anythingElse(t, tb); } return true; } private boolean anythingElse(Token t, HtmlTreeBuilder tb) { tb.insert("html"); tb.transition(BeforeHead); return tb.process(t); } }
本站支持 pay for your wishes
相关推荐
jsoup解析html网页的api
使用Jsoup解析html网页,包含jsoup.jar \ api.chm \ 代码
Jsoup解析html+xml
用Jsoup解析html的所有jar包!
jsoup解析HTML,获取htmlUrl
java语言,jsoup解析html修改文件名的一个demo
使用Jsoup解析Html文档,无须正则表达式,使用元素定位到Html的标签元素
使用jsoup对Html解析并生成excel
利用jsoup工具解析html的demo
jsoup和jtidy 对html操作,将不规范的html转换为xhtml
Jsoup
包含jsoup-1.7.3.jar,jsoup-1.7.3-javadoc.jar,jsoup-1.7.3-sources.jar
jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jarjsoup-...
jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。本文主要介绍如何使用 jsoup 来进行...
jsoup是一个用于处理现实世界 HTML 的 Java 库。它使用最好的 HTML5 DOM 方法和 CSS 选择器,提供了一个非常方便的 API,用于获取 URL 以及提取和操作数据。 jsoup实现了WHATWG HTML5规范,并将 HTML 解析为与现代...
使用JSoup实现解析URL或HTML的内容
jsoup Java HTML解析器 jsoup Java HTML解析器 jsoup Java HTML解析器 jsoup Java HTML解析器 jsoup Java HTML解析器
一个简单地android解析html的例子
这是使用Jsoup解析HTML得到数据的一个小例子,具体的使用方法请参见我的博客:http://blog.csdn.net/ProgramChangesWorld/article/details/47134255
jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。