`

jsoup 处理HTML 坑记录

阅读更多

    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文件

    Jsoup是一款非常强大的Java库,专门用于处理和解析HTML文档。它提供了丰富的API,使得开发者可以轻松地在代码中操作HTML,实现对网页内容的抓取、解析和修改。Jsoup不仅能够帮助我们提取结构化数据,还能够模拟...

    使用Jsoup解析html网页

    **Jsoup:HTML解析神器** ...总结来说,Jsoup是Java开发者处理HTML时的强大工具,无论是在数据抓取、网页验证还是内容过滤等方面,都能提供极大的便利。学习和掌握Jsoup的使用,将极大地提升你的Web开发效率。

    jsoup和jtidy 对html操作,将不规范的html转换为xhtml

    总结来说,jsoup和Jtidy是Java开发者处理HTML的强大工具,它们能够帮助我们将不规范的HTML转换为XHTML,提高代码的可读性和解析的准确性。通过这两个库,我们可以更加高效地处理网页内容,无论是数据抓取、页面解析...

    jsoupAPI解析html

    jsoup是一个非常强大的Java库,专为处理真实世界的HTML而设计。它提供了方便的API,用于提取和操作数据,使用DOM,CSS和jQuery-like方法。在深入jsoup的API之前,我们需要理解HTML解析的重要性。在Web开发中,经常...

    Jsoup解析html+xml

    Jsoup是一款非常强大的Java库,专门用于处理HTML和XML文档,提供了一系列简洁的API来抓取、解析、修改以及格式化这些文档。在现代Web开发中,数据抓取和网页解析是常见需求,Jsoup凭借其高效且易用的特性,成为...

    jsoup解析html所需包1.7.3

    JSoup是一款强大的Java库,专为处理和解析HTML文档而设计。它提供了简单易用的API,使开发者能够轻松地提取数据、操作DOM(文档对象模型)以及清理HTML。标题中的"jsoup解析html所需包1.7.3"表明我们将讨论的是JSoup...

    用Jsoup解析html的所有jar包

    Jsoup是一款非常强大的Java库,专门用于处理HTML文档,提供了丰富的API来抓取、解析、修改和输出HTML内容。在Java开发中,如果你需要从网页上提取数据或者进行Web抓取,Jsoup是一个理想的选择。这个压缩包文件“用...

    Jsoup解析html的示例

    总之,Jsoup为Android开发者提供了一种高效、便捷的方式来解析和操作HTML,从而在各种应用场景中实现数据的提取和处理。通过熟练掌握Jsoup,开发者可以轻松地从网页中获取有价值的信息,并将其融入到Android应用程序...

    Android使用Jsoup技术解析HTML

    Jsoup是一个Java库,专为处理真实世界的HTML而设计。在Android开发中,我们经常需要从网页抓取数据,比如解析新闻标题、获取图片链接或者提取用户评论等。Jsoup提供了一种简单、安全且有效的方法来解析和操作HTML...

    jsoup解析HTML

    JSoup是一个用于处理实际世界HTML的Java库。它提供了非常方便的API,用于提取和操作数据,使用DOM、CSS以及类似于jQuery的方法。在JavaScript中,我们通常会使用jQuery来操作DOM,但在服务器端或Java环境中,JSoup...

    jsoup提取.html部分属性

    JSoup是一个非常强大的Java库,它主要用于处理实际世界中的HTML,提供了一种方便、灵活的方式来抓取和操作HTML内容。在这个例子中,我们将深入探讨如何使用JSoup从HTML文件中提取特定属性,以实现数据的解析和分析。...

    android使用jsoup 解析html文件

    `jsoup`是一个Java库,提供了一种简单而强大的API,用于处理现实世界中的HTML。它可以解析HTML,提取和修改数据,就像浏览器一样理解HTML文档结构。`jsoup`还支持CSS选择器,使得选取HTML元素变得非常方便。 在...

    jsoup解析html修改文件名

    在Java编程领域,Jsoup库是一个非常实用的工具,它专为解析HTML和提取结构化数据而设计。本文将深入探讨如何使用Jsoup解析HTML,并根据解析结果来修改文件名。我们将通过一个简单的示例来展示这个过程。 首先,我们...

    Jsoup解析html

    总的来说,Jsoup是一个强大且易于使用的HTML解析库,它简化了HTML的解析和操作,让开发者可以专注于业务逻辑,而非底层的HTML处理细节。无论你是新手还是经验丰富的开发者,学习和掌握Jsoup都能显著提升你在Web开发...

    jsoup解析html

    **JSoup:HTML解析神器** JSoup是一款Java库,它为了解析HTML和XML文档而设计,提供了简单易用的API,使得开发者可以方便地抓取和操作网页内容。...只要合理使用,JSoup可以极大地简化HTML处理的工作,提高开发效率。

    Jsoup解析Html获取新闻列表

    Jsoup是一款非常强大的Java库,专门用于处理HTML文档,它提供了简单、安全的方式来抓取和操作HTML内容。在本文中,我们将深入探讨如何利用Jsoup解析HTML,以便获取新闻列表等网页数据。首先,让我们了解Jsoup的基本...

    Jsoup解析html中文文档

    在处理不可信来源的HTML时,jsoup提供了安全的清理功能,帮助防止XSS攻击: ```java String html = "&lt;p&gt;Hello, ('XSS')&gt;world!&lt;/p&gt;"; Cleaner cleaner = new Cleaner(new Whitelist().addTags("p", "b")); ...

    JsoupAPI(jsoup帮助文档)

    Jsoup 是一个用于处理和解析HTML的Java库,它提供了强大的功能,使得在Java程序中操作HTML文档变得简单而直观。在Jsoup 1.10.2版本中,这个API进一步优化了对HTML的处理能力,提供了丰富的类和方法来满足各种需求。 ...

    2010最新解析html开源项目jsoup源码及api下载及jsoup.jar

    jsoup是一款强大的Java库,专为处理现实世界中的HTML而设计。它提供了一种方便的API,用于提取和操作数据,使用DOM,CSS和jQuery-like方法。jsoup能够解析HTML文档,清洁不规范的HTML,并可以从中提取结构化数据。这...

    jsoup 取html信息校验xml数据

    JSoup是一个非常强大的Java库,专门用于处理和解析HTML文档。它提供了一种简单而直观的方式来抓取、解析、修改以及清理HTML内容。JSoup的核心在于它能够理解和模拟浏览器对HTML的解析方式,使得开发者可以方便地获取...

Global site tag (gtag.js) - Google Analytics