当前使用XPath 1.0
1,需求说明
假设要查询一个图书列表,寻找TEST的著作.
2,创建项目
创建一个Java项目.
Java 1.5推出了javax.xml.xpath包,提供一个引擎和对象模型独立的XPath库.只要Java环境>1.5,无需增加类库.
这个包也可用于Java 1.3及以后的版本,但需要单独安装Java API for XML Processing(JAXP)1.3
提示:Xalan 2.7 和Saxon 8 以及其他产品包含了这个库的实现.
3,创建包含图书信息的XML文档
编写包含图书信息的XML文档,将其命名为books.xml,并将其放至在src目录下:
<inventory>
<book year="2000">
<title>Thinking in Java</title>
<author>TEST</author>
<publisher>JQGYCBS</publisher>
<isbn>80958</isbn>
<price>98.95</price>
</book>
<book year="2005">
<title>ROR</title>
<author>TEST</author>
<publisher>DZGYCBS</publisher>
<isbn>0743416910</isbn>
<price>65.99</price>
</book>
<book year="1995">
<title>H</title>
<author>King</author>
<publisher>Sc</publisher>
<isbn>0553862</isbn>
<price>77.50</price>
</book>
</inventory>
4,XPath表达式的使用介绍
查找所有图书的 XPath 查询非常简单:
//book[author="TEST"]
book代表节点的名称,author属性的名称,后面是要查询的值
为了找出这些图书的标题(title),只要增加一步,表达式就变成了:
//book[author="TEST"]/title
title代表要取元素的名称
最后,真正需要的是 title 元素的文本节点内容.这就要求再增加一步,完整的表达式就是:
//book[author="TEST"]/title/text()
text()该节点的内容
5,编写代码
现在提供一个简单的程序,它从 Java 语言中执行以上的表达式查询,然后把找到的所有图书的标题打印出来.
5.1,将XML文档加载到DOM Document对象中
首先,需要将文档加载到一个 DOM Document 对象中.
下面的简单代码片段解析文档并建立对应的 Document 对象:
//用 JAXP 解析文档
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// never forget this!
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("src/books.xml");
到目前为止,这仅仅是标准的 JAXP 和 DOM.
5.2,创建 XPathFactory
XPathFactory pathFactory = XPathFactory.newInstance();
XPathFactory说明:
XPathFactory是一个抽象工厂.
抽象工厂设计模式使得这一种 API 能够支持不同的对象模型,如 DOM、JDOM 和 XOM.
为了选择不同的模型,需要向XPathFactory.newInstance()方法传递标识对象模型的统一资源标识符(URI).
比如 http://xom.nu/ 可以选择 XOM.但实际上,到目前为止
DOM 是该 API 支持的惟一对象模型.
5.3,使用XPathFactory工厂创建 XPath 对象
XPath xpath = pathFactory.newXPath();
5.4,使用XPath对象编译XPath表达式
XPathExpression pathExpression = xpath.compile("//book[author='TEST']/title/text()");
5.5,计算 XPath 表达式得到结果
表达式是针对特定的上下文节点计算的,在这个例子中是整个文档.这时还必须指定返回类型.这里要求返回一个节点集:
Object result = pathExpression.evaluate(doc, XPathConstants.NODESET);
//doc是Document对象名,XPathConstants代表XPath常量,NODESET是XPath 1.0 NodeSet数据类型
//XPathConstants.NODESET将XPathConstants常量返回NODESET类型
说明:
多数 XPath 表达式,特别是位置路径,都返回节点集.
但是还有其他可能:
比如,XPath 表达式:count(//book) 返回文档中的图书数量.
XPath 表达式:count(//book[author="TEST"]) > 10 返回一个布尔值:如果文档中 TEST的著作超过 10 本则返回 true,否则返回 false.
evaluate() 方法被声明为返回 Object,实际返回什么依赖于 XPath 表达式的结果以及要求的类型
一般来说,XPath与Java的映射关系是:
number 映射为 java.lang.Double
string 映射为 java.lang.String
boolean 映射为 java.lang.Boolean
node-set 映射为 org.w3c.dom.NodeList
在 Java 中计算 XPath 表达式时,第二个参数(XPathConstants常量)指定需要的返回类型.有五种可能,都在 javax.xml.xpath.XPathConstants 类中命名了常量:
XPathConstants.NODESET
XPathConstants.BOOLEAN
XPathConstants.NUMBER
XPathConstants.STRING
XPathConstants.NODE
XPathConstants.NODE提示:
最后一个 XPathConstants.NODE 实际上没有匹配的 XPath 类型.只有知道 XPath 表达式只返回一个节点或者只需要一个节点时才使用它.如果 XPath 表达式返回了多个节点并且指定了 XPathConstants.NODE,则 evaluate() 按照文档顺序返回第一个节点.如果 XPath 表达式选择了一个空集并指定了 XPathConstants.NODE,则 evaluate() 返回 null.
注意:如果不能完成要求的转换,evaluate()将抛出 XPathException.
5.6,将结果强制转化成 DOM NodeList
通过将结果强制转化成 DOM NodeList,然后遍历列表就能得到所有的标题:
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getNodeValue());
}
6,完整Java程序代码
package book;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class Test {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true); // never forget this!
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("src/books.xml");
XPathFactory pathFactory = XPathFactory.newInstance();
XPath xpath = pathFactory.newXPath();
XPathExpression pathExpression = xpath
.compile("//book[author='TEST']/title/text()");
Object result = pathExpression.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getNodeValue());
}
}
}
分享到:
相关推荐
因此,编写代码时应包含异常处理,并确保XPath表达式能正确处理各种可能的输入。 7. 进阶XPath功能: XPath还支持更复杂的查询,比如使用轴(axis)来选取特定关系的节点,如祖先轴(ancestor)和子元素轴(child)...
在这个"xpath谷歌浏览器扩展程序"中,我们可以看到它是一个专为谷歌浏览器(Chrome)设计的插件,目的是方便网页抓取(Web Scraping)或者网页解析的开发者们更有效地测试和验证XPath表达式的正确性。 该扩展程序的...
它可以作为智能编辑器来编写和验证xpath、cssSelector、Playwright选择器、jQuery和JSPath。SelectorHub还可以用于自动生成唯一的#xpath、css选择器和所有可能的选择器。 but,毕竟是机器生成的,路径有时候不是很...
XPath(XML Path ...使用XPath生成器可以显著提高开发效率,减少手动编写XPath表达式的错误。C#作为.NET框架的主要编程语言,提供了丰富的XML处理支持,结合这个XPath生成器,可以更好地进行XML相关的开发工作。
通过编写XPath表达式,可以准确地定位到网页上的按钮、链接或其他交互元素,从而实现自动点击、填写表单等操作。此外,对于数据抓取项目,XPath可以快速定位到网页上的特定数据块,如新闻标题、评论内容等,大大提高...
XPath Helper是一款针对网页数据提取和爬虫开发的强大工具,它主要设计用于Chrome浏览器,并通过扩展程序的形式集成在浏览器中。用户可以通过安装CRX文件(即`xpath-helper.crx`)来添加这个插件。XPath(XML Path ...
本压缩包文件"xpath-helper.crx"很可能是一个Chrome浏览器的扩展程序,旨在提供实时的XPath查询支持。 XPath(XML Path Language)是一种在XML文档中查找信息的语言,它允许我们通过路径表达式来选取节点,如元素、...
在IE浏览器下,为了方便开发者获取XML或HTML文档中的XPath路径,存在一种小工具,本文将探讨这个C#编写的IE下获取XPath的小工具源码。 首先,我们需要理解XPath的基本概念。XPath使用路径表达式来选取节点,这些...
XPathHelper_2.0.2.zip 是一个包含XPath Helper Chrome扩展程序的压缩文件,版本为2.0.2。XPath Helper是一款非常实用的工具,它专为Chrome浏览器设计,帮助开发者和网页爬虫工程师高效地测试和调试XPath表达式。...
这样,开发者可以在不同的XML处理框架之间轻松切换,而不必重新编写XPath代码。 在使用XPath的jar包时,首先需要将其添加到项目的类路径中。对于Jaxen,你可以在解压后的文件中找到对应的jar文件,比如`jaxen-1.x.x...
3. 智能提示:输入XPath表达式时,它会提供智能补全功能,帮助你准确无误地编写XPath语句。 4. 代码测试:你可以立即测试所写的XPath表达式,看看是否能够正确选取预期的元素,以及选取元素的数量。 5. 多语言支持:...
Python 编写的爬虫程序是信息技术领域中一种用于自动化数据抓取的技术,它允许开发者从互联网上批量获取信息。Python 作为一门高级编程语言,因其语法简洁、库丰富而成为编写爬虫的理想选择。本篇将深入探讨Python...
本书《XPath 2.0 Programmer’s Reference》由 Michael Kay 编写,是学习 XPath 2.0 的权威指南。本书全面介绍了 XPath 2.0 的语法、功能及应用实例,非常适合希望深入掌握 XPath 2.0 的程序员阅读。 - **作者简介*...
首先,安装XPath Helper插件相当简单。在谷歌浏览器中,您需要点击右上角的三个点图标,这会打开一个下拉菜单。在菜单中选择“更多工具”,然后点击“扩展程序”。这将打开一个新的页面,显示您已安装的所有扩展程序...
在Go语言环境中,`goxpath`是一个实现了XPath 1.0的库,允许开发者在Go程序中解析和操作XML文档。然而,根据提供的描述,“不推荐使用”,这可能是因为该库可能存在某些限制、已知问题或者有更好的替代选项。推荐...
XCat是一个命令行程序,用于辅助XPath注入漏洞的利用。XCat使用Python编写并开放源代码。XCat正常使用需要python的SimpleXMLWriter模块。 标签:XPath
【PHP简单的采集程序】是一个基于PHP编写的网页数据抓取工具,主要针对初学者和有一定编程基础的开发者,用于理解并实践网页数据的抓取原理和技术。在这个项目中,我们将探讨如何利用PHP来实现一个基本的网络爬虫,...
2. **性能优化**:尽量使用短且简单的 XPath 表达式,因为复杂的 XPath 可能会降低测试的执行速度。 3. **适应性**:由于应用界面可能会变化,应尽量避免过于依赖具体的属性值,可以考虑使用相对路径或部分属性来...
2. **选择器的使用**:学习如何编写XPath和Css表达式来定位页面上的特定元素,例如,通过id、class、tag name、属性等进行定位。 3. **定位策略**:掌握XPath和Css的不同定位策略,如绝对路径与相对路径,类选择器、...
通过熟练掌握XPath,你可以编写出更精确、更高效的爬虫脚本,避免因DOM解析错误导致的抓取失败。 总的来说,XPath Helper是谷歌浏览器的一个实用工具,无论是对于前端开发者在调试网页布局,还是对于后端爬虫工程师...