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是一款非常强大的Java库,专门用于处理和解析HTML文档。它提供了丰富的API,使得开发者可以轻松地在代码中操作HTML,实现对网页内容的抓取、解析和修改。Jsoup不仅能够帮助我们提取结构化数据,还能够模拟...
**Jsoup:HTML解析神器** ...总结来说,Jsoup是Java开发者处理HTML时的强大工具,无论是在数据抓取、网页验证还是内容过滤等方面,都能提供极大的便利。学习和掌握Jsoup的使用,将极大地提升你的Web开发效率。
总结来说,jsoup和Jtidy是Java开发者处理HTML的强大工具,它们能够帮助我们将不规范的HTML转换为XHTML,提高代码的可读性和解析的准确性。通过这两个库,我们可以更加高效地处理网页内容,无论是数据抓取、页面解析...
jsoup是一个非常强大的Java库,专为处理真实世界的HTML而设计。它提供了方便的API,用于提取和操作数据,使用DOM,CSS和jQuery-like方法。在深入jsoup的API之前,我们需要理解HTML解析的重要性。在Web开发中,经常...
Jsoup是一款非常强大的Java库,专门用于处理HTML和XML文档,提供了一系列简洁的API来抓取、解析、修改以及格式化这些文档。在现代Web开发中,数据抓取和网页解析是常见需求,Jsoup凭借其高效且易用的特性,成为...
JSoup是一款强大的Java库,专为处理和解析HTML文档而设计。它提供了简单易用的API,使开发者能够轻松地提取数据、操作DOM(文档对象模型)以及清理HTML。标题中的"jsoup解析html所需包1.7.3"表明我们将讨论的是JSoup...
Jsoup是一款非常强大的Java库,专门用于处理HTML文档,提供了丰富的API来抓取、解析、修改和输出HTML内容。在Java开发中,如果你需要从网页上提取数据或者进行Web抓取,Jsoup是一个理想的选择。这个压缩包文件“用...
总之,Jsoup为Android开发者提供了一种高效、便捷的方式来解析和操作HTML,从而在各种应用场景中实现数据的提取和处理。通过熟练掌握Jsoup,开发者可以轻松地从网页中获取有价值的信息,并将其融入到Android应用程序...
Jsoup是一个Java库,专为处理真实世界的HTML而设计。在Android开发中,我们经常需要从网页抓取数据,比如解析新闻标题、获取图片链接或者提取用户评论等。Jsoup提供了一种简单、安全且有效的方法来解析和操作HTML...
JSoup是一个用于处理实际世界HTML的Java库。它提供了非常方便的API,用于提取和操作数据,使用DOM、CSS以及类似于jQuery的方法。在JavaScript中,我们通常会使用jQuery来操作DOM,但在服务器端或Java环境中,JSoup...
JSoup是一个非常强大的Java库,它主要用于处理实际世界中的HTML,提供了一种方便、灵活的方式来抓取和操作HTML内容。在这个例子中,我们将深入探讨如何使用JSoup从HTML文件中提取特定属性,以实现数据的解析和分析。...
`jsoup`是一个Java库,提供了一种简单而强大的API,用于处理现实世界中的HTML。它可以解析HTML,提取和修改数据,就像浏览器一样理解HTML文档结构。`jsoup`还支持CSS选择器,使得选取HTML元素变得非常方便。 在...
在Java编程领域,Jsoup库是一个非常实用的工具,它专为解析HTML和提取结构化数据而设计。本文将深入探讨如何使用Jsoup解析HTML,并根据解析结果来修改文件名。我们将通过一个简单的示例来展示这个过程。 首先,我们...
总的来说,Jsoup是一个强大且易于使用的HTML解析库,它简化了HTML的解析和操作,让开发者可以专注于业务逻辑,而非底层的HTML处理细节。无论你是新手还是经验丰富的开发者,学习和掌握Jsoup都能显著提升你在Web开发...
**JSoup:HTML解析神器** JSoup是一款Java库,它为了解析HTML和XML文档而设计,提供了简单易用的API,使得开发者可以方便地抓取和操作网页内容。...只要合理使用,JSoup可以极大地简化HTML处理的工作,提高开发效率。
Jsoup是一款非常强大的Java库,专门用于处理HTML文档,它提供了简单、安全的方式来抓取和操作HTML内容。在本文中,我们将深入探讨如何利用Jsoup解析HTML,以便获取新闻列表等网页数据。首先,让我们了解Jsoup的基本...
在处理不可信来源的HTML时,jsoup提供了安全的清理功能,帮助防止XSS攻击: ```java String html = "<p>Hello, ('XSS')>world!</p>"; Cleaner cleaner = new Cleaner(new Whitelist().addTags("p", "b")); ...
Jsoup 是一个用于处理和解析HTML的Java库,它提供了强大的功能,使得在Java程序中操作HTML文档变得简单而直观。在Jsoup 1.10.2版本中,这个API进一步优化了对HTML的处理能力,提供了丰富的类和方法来满足各种需求。 ...
jsoup是一款强大的Java库,专为处理现实世界中的HTML而设计。它提供了一种方便的API,用于提取和操作数据,使用DOM,CSS和jQuery-like方法。jsoup能够解析HTML文档,清洁不规范的HTML,并可以从中提取结构化数据。这...
JSoup是一个非常强大的Java库,专门用于处理和解析HTML文档。它提供了一种简单而直观的方式来抓取、解析、修改以及清理HTML内容。JSoup的核心在于它能够理解和模拟浏览器对HTML的解析方式,使得开发者可以方便地获取...