JsoupXpath v2.5.1 发布,HTML 解析器

栏目: 软件资讯 · 发布时间: 4年前

内容简介:简介 JsoupXpath 是一款纯Java开发的使用xpath解析提取html数据的解析器,针对html解析完全重新实现了W3C XPATH 1.0标准语法,xpath的Lexer和Parser基于Antlr4构建,html的DOM树生成采用Jsoup,故命名为JsoupXpat...

简介

JsoupXpath 是一款纯 Java 开发的使用xpath解析提取html数据的解析器,针对html解析完全重新实现了W3C XPATH 1.0标准语法,xpath的Lexer和Parser基于Antlr4构建,html的DOM树生成采用Jsoup,故命名为JsoupXpath. 为了在java里也享受xpath的强大与方便但又苦于找不到一款足够好用的xpath解析器,故开发了JsoupXpath。JsoupXpath的实现逻辑清晰,扩展方便, 支持完备的W3C XPATH 1.0标准语法,W3C规范:http://www.w3.org/TR/1999/REC-xpath-19991116 ,JsoupXpath语法描述文件Xpath.g4

更新内容

  • 修复了 PrecedingSiblingOneSelector 这个函数无效的问题 , 感谢@s24963386贡献!
  • 修复 #Issue66 ,函数参数表达式使用的上下文不够全面的问题
  • 优化text() 块节点属性信息,以便更好的支持倒序索引
  • 增加double/long sum(node-set) 函数,计算给定的节点集合中数字节点值的和,计算参数范围内包含非数字内容则计算无效。
  • 优化num()结果表现,尽量符合用户使用直觉。整数返回整数,浮点数返回浮点数,不再统一只返回浮点数。

相关Test:

    @Test
    public void issue64And65(){
        String content = "<div class='a'>1</div>\n" +
                "<div>2</div>\n" +
                "<div class='a'>3</div>\n" +
                "<div>4</div>\n" +
                "<div>5</div>";
        JXDocument j = JXDocument.create(content);
        Assert.assertEquals("2", j.selNOne("//div[text()='3']/preceding-sibling-one::div/text()").asString());
        Assert.assertEquals("4", j.selNOne("//div[text()='3']/following-sibling-one::div/text()").asString());
    }

    @Test
    public void issue66() throws Exception {
        JXDocument j = JXDocument.create(FileUtils.readFileToString(new File(loader.getResource("issue66.html").toURI()), Charset.forName("utf8")));
        logger.info("{}", j.selN("count(//bookstore/book)"));
        logger.info("{}", j.selN("//bookstore/book[position()<count(//bookstore/book)]/price"));
        logger.info("{}", j.selN("//bookstore/book[position()<count(//bookstore/book)-1]/price"));
        logger.info("{}", j.selN("sum(//bookstore/book/year[num()<2005])"));
        logger.info("{}", j.selN("sum(//bookstore/book/price)"));
        logger.info("{}", j.selN("sum(//bookstore/book/title)"));
        Assert.assertEquals(4,j.selNOne("count(//bookstore/book)").asLong().longValue());
        Assert.assertEquals(3,j.selN("//bookstore/book[position()<count(//bookstore/book)]/price").size());
        Assert.assertEquals(2,j.selN("//bookstore/book[position()<count(//bookstore/book)-1]/price").size());
        Assert.assertEquals(4006,j.selNOne("sum(//bookstore/book/year[num()<2005])").asLong().longValue());
        Assert.assertEquals("",j.selNOne("sum(//bookstore/book/title)").asString());
    }

写在最后

欢迎大家贡献新特性


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

大数据预测

大数据预测

【美】埃里克·西格尔 / 周昕 / 中信出版社 / 2014-3 / 58.00

360公司董事长周鸿祎、《罗辑思维》主讲人罗振宇郑重推荐 2020年的一天,在你驱车前往公司的路上,导航系统通过预测交通流量,会自动帮你选择一条最合适的交通路线;车内推荐系统会根据你的饮食习惯预测你可能会喜欢吃什么,并推荐沿途的早餐店;你的电子社交助理已经为你自动选择了你可能感兴趣的社交网信息;当车内系统预测到你驾车有些分心时,座椅会自动震动进行提醒…… 以上这些情景不是科幻大片独有的......一起来看看 《大数据预测》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器