Java中XPath操作需通过XPathFactory、XPath和XPathExpression协作完成:先创建工厂,再获取XPath实例,编译表达式得可复用XPathExpression,最后对XML文档求值;编译必须用xpath.compile(),不可new,错误抛XPathExpressionException;推荐复用实例以避免重复编译开销。
Java 中使用 XPath 主要通过 XPathFactory、XPath 和 XPathExpression 三者协作完成:先创建工厂,再获取 XPath 实例,编译表达式得到可复用的 XPathExpression,最后对 XML 文档求值。
不能直接 new,必须通过 XPath.compile() 编译字符串表达式获得。编译过程会检查语法,抛出 XPathExpressionException(如路径写错、函数名拼错)。
XPath 实例和编译后的 XPathExpression,避免重复编译开销XPathVariableResolver 配合 setXPathFunctionResolver 扩展功能XPathExpression expr = xpath.compile("//book[@category='fiction']/title/text()");
XPathExpression.evaluate() 是核心方法,需传入 Node(通常是 Document 根节点)和返回类型常量(如 XPathConstants.STRING、NUMBER、BOOLEAN、NODE、NODESET)。
NODESET 时得到 NodeList,遍历需注意它是 live list(随文档变化而变)NODE 时只取第一个匹配节点;无匹配则返回 null
count(//book))必须用 XPathConstants.NUMBER,否则报错XML 含命名空间(如 )时,必须注册 NamespaceContext,否则表达式无法匹配。
立即学习“Java免费学习笔记(深入)”;
NamespaceContext 实现 getNamespaceURI(String prefix) 方法,将前缀映射到 URIxpath.setNamespaceContext(...) 设置后,表达式才能用前缀(如 //rss:channel/title)*:element 绕过前缀,但不可靠,不推荐用于生产环境运行时报错多源于表达式语法、类型不匹配或上下文缺失。建议按顺序排查:
DocumentBuilder.parse() 可能静默失败)expr.toString() 或日志输出表达式字符串,核对引号、括号、大小写/ 或 /*)验证基础路径是否通,再逐步加条件XPathExpressionException 通常在 compile 阶段抛出;ClassCastException 多因 evaluate 返回类型与预
期不符