XPath详解与Java示例解析

0 下载量 15 浏览量 更新于2024-08-31 1 收藏 82KB PDF 举报
"本文将深入探讨XPath在Java中的应用,包括XPath的基本概念、语法以及如何通过实例代码来解析XML文档。首先,我们了解到XPath是一种用于在XML文档中定位和选择节点的语言,它能够根据路径表达式找到文档中的特定元素或属性。文章的核心内容围绕XPath的七种基本节点类型展开,包括元素(Element)、属性(Attribute)、文本(Text)等,这些是XPath表达式的基础。 在提供的Java示例代码中,首先导入了必要的库,如`DocumentBuilderFactory`, `DocumentBuilder`, `XPathFactory`, 和 `XPathExpressionException`。然后,创建了一个`Document`对象,通过调用`DocumentBuilder`的`parse()`方法解析XML文件。代码设置了`DocumentBuilderFactory`的`namespaceAware`属性为`false`,这意味着在解析时不考虑命名空间。 接着,实例化了`XPathFactory`和`XPath`对象,通过`XPathExpression`的`compile()`方法创建了一个XPath表达式`//name/text()」。该表达式表示查找所有名为"name"的元素下的文本节点。执行`expr.evaluate(doc, XPathConstants.NODESET)`后,结果被转换为`NodeList`对象,存储了所有匹配的节点。 最后,通过遍历`NodeList`,输出每个节点的值。这展示了如何使用XPath在Java中动态地查找和处理XML文档中的内容。 本文通过一个实际的Java示例,详细讲解了XPath在Java编程中的使用技巧,这对于理解和操作XML数据具有重要意义。掌握XPath不仅可以提高处理XML文档的效率,还能在处理复杂的数据结构时提供强大的查询能力。"
2019-07-19 上传
JsoupXpath 是一款纯Java开发的使用xpath解析html的解析器,xpath语法分析与执行完全独立,html的DOM树生成借助Jsoup,故命名为JsoupXpath.为了在java里也享受xpath的强大与方便但又苦于找不到一款足够强大的xpath解析器,故开发了JsoupXpath。JsoupXpath的实现逻辑清晰,扩展方便,支持几乎全部常用的xpath语法.http://www.cnblogs.com/ 为例 "//a/@href"; "//div[@id='paging_block']/div/a[text()='Next >']/@href"; "//div[@id='paging_block']/div/a[text()*='Next']/@href"; "//h1/text()"; "//h1/allText()"; "//h1//text()"; "//div/a"; "//div[@id='post_list']/div[position()1000]/div/h3/allText()"; //轴支持 "//div[@id='post_list']/div[self::div/div/div/span[@class='article_view']/a/num()>1000]/div/h3/allText()"; "//div[@id='post_list']/div[2]/div/p/preceding-sibling::h3/allText()"; "//div[@id='post_list']/div[2]/div/p/preceding-sibling::h3/allText()|//div[@id='post_list']/div[1]/div/h3/allText()"; 在这里暂不列出框架间的对比了,但我相信,你们用了会发现JsoupXpath就是目前市面上最强大的的Xpath解析器。 快速开始 如果不方便使用maven,可以直接使用lib下的依赖包跑起来试试,如方便可直接使用如下dependency(已经上传至中央maven库,最新版本0.1.1):    cn.wanghaomiao    JsoupXpath    0.1.1 依赖配置好后,就可以使用如下例子进行体验了!String xpath="//div[@id='post_list']/div[./div/div/span[@class='article_view']/a/num()>1000]/div/h3/allText()";String doc = "..."; JXDocument jxDocument = new JXDocument(doc); List<Object> rs = jxDocument.sel(xpath); for (Object o:rs){     if (o instanceof Element){             int index = ((Element) o).siblingIndex();             System.out.println(index);     }     System.out.println(o.toString()); } 其他可以参考 cn.wanghaomiao.example包下的例子 语法 支持标准xpath语法(支持谓语嵌套),支持全部常用函数,支持全部常用轴,去掉了一些标准里面华而不实的函数和轴,下面会具体介绍。语法可以参考http://www.w3school.com.cn/xpath/index.asp 关于使用Xpath的一些注意事项 非常不建议直接粘贴Firefox或chrome里生成的Xpa