贝利信息

Java的XPath.evaluate方法怎么返回节点列表

日期:2026-01-12 00:00 / 作者:畫卷琴夢
若要返回 NodeList,必须显式指定 XPathConstants.NODESET;否则默认转为字符串。正确写法:xpath.evaluate(expression, doc, XPathConstants.NODESET),再强制转换为 NodeList 遍历。

Java 的 XPath.evaluate() 方法默认返回字符串、数字或布尔值,**若要返回节点列表(如 NodeList),必须显式指定返回类型为 XPathConstants.NODESET**,否则会自动转换为字符串(只取第一个匹配节点的文本内容)。

正确获取 NodeList 的写法

调用 evaluate() 时,第三个参数传入 XPathConstants.NODESET

Document doc = ...; // 已解析的 XML 文档
XPath xpath = XPathFactory.newInstance().newXPath();
String expression = "//book/title";

// ✅ 正确:返回 NodeList
Object result = xpath.evaluate(expression, doc, XPathConstants.NODESET);

// 转为 NodeList 并遍历
NodeList nodeList = (NodeList) result;
for (int i = 0; i < nodeList.getLength(); i++) {
    Node node = nodeList.item(i);
    System.out.println(node.getTextContent());
}

常见错误与注意事项

其他常用返回类型对照

除了 NODESET,还可按需选择:

简化写法(Java 7+ 推荐)

可直接声明类型,避免显式转型:

NodeList titles = (NodeList) xpath.evaluate("//book/title", doc, XPathConstants.NODESET);

或配合 try-with-resources(若使用支持的解析器)和更安全的类型检查进一步健壮化处理。