Java中推荐使用javax.xml.xpath包执行XPath查询,核心为XPathFactory、XPath和XPathExpression三个类;需预编译表达式、解析XML为Document、按需调用evaluate获取结果,并注意线程安全与命名空间处理。

Java 中使用 javax.xml.xpath 包执行 XPath 查询非常直接,核心是 XPathFactory、XPath 和 XPathExpression 三个类。它替代了旧版(JAXP 1.3 之前)的 org.apache.xpath.XPathAPI(已废弃),不依赖 Apache Xalan,是标准、轻量、推荐的方式。
创建 XPath 实例并编译表达式
每次查询前应先获取 XPath 对象,并对 XPath 表达式进行预编译(提升重复查询性能):
- 用
XPathFactory.newInstance().newXPath()获取线程不安全的XPath实例(建议每次请求新建或使用 ThreadLocal) - 调用
xpath.compile("//book/title")得到可重用的XPathExpression - 避免在循环中反复调用
compile(),除非表达式动态变化
解析 XML 文档为 Document(输入准备)
XPath 需要 DOM Document 作为上下文节点,不能直接操作字符串或流:
- 用
DocumentBuilder解析 XML 字符串或文件:Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(xmlString))); - 确保
DocumentBuilderFactory设置setNamespaceAware(false)(默认 false),若 XML 含命名空间且需匹配,须设为true并配合NamespaceContext
执行 XPath 查询并获取结果
调用 evaluate() 方法,根据返回类型选择对应重载版本:
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
立即学习“Java免费学习笔记(深入)”;
-
expression.evaluate(doc, XPathConstants.NODE)→ 返回单个Node(如 Element 或 Text) -
expression.evaluate(doc, XPathConstants.NODESET)→ 返回NodeList(常用,如查多个同名元素) -
expression.evaluate(doc, XPathConstants.STRING)→ 直接返回字符串值(自动取第一个匹配节点的文本内容) -
expression.evaluate(doc, XPathConstants.BOOLEAN)或NUMBER→ 对应布尔/数字结果
注意:若无匹配,NODE 和 STRING 返回 null 或空字符串;NODESET 返回空 NodeList(size() == 0),不会抛异常。
处理常见问题与注意事项
实际使用中容易忽略几个关键点:
-
线程安全:
XPath实例不是线程安全的,多线程场景下不要共享同一实例 -
命名空间支持:XML 带 namespace(如
)时,必须注册NamespaceContext并在 XPath 中使用前缀(如rss:channel) -
默认命名空间陷阱:XPath 不识别 XML 默认命名空间(
xmlns="..."),必须显式绑定前缀才能查询 - 性能提示:DOM 构建本身开销较大,若仅需简单提取,可考虑 StAX 或 Jackson XML 等更轻量方案;XPath 更适合结构复杂、查询灵活的场景










