Java中如何遍历所有匹配同一XPath表达式的节点
实现XPath多匹配节点遍历的方法
你当前使用XPathConstants.STRING作为返回值类型时,evaluate方法只会返回第一个匹配节点的文本内容,无法拿到全部匹配结果。要实现遍历所有匹配节点的逻辑,只需要将返回类型修改为XPathConstants.NODESET拿到节点集合,再遍历集合即可。
完整实现代码
import org.w3c.dom.Node; import org.w3c.dom.NodeList; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathFactory; // 初始化XPath实例 XPath xPath = XPathFactory.newInstance().newXPath(); // 传入NODESET常量,获取所有匹配路径的节点集合 NodeList matchedNodes = (NodeList) xPath.evaluate("something/fruit/colour", xmlDocument, XPathConstants.NODESET); // 遍历所有匹配节点,对应你需要的foreach逻辑 for (int i = 0; i < matchedNodes.getLength(); i++) { Node currentNode = matchedNodes.item(i); // 读取当前节点的文本值 String currentValue = currentNode.getTextContent(); // 打印节点值 System.out.println(currentValue); }
运行效果
针对你给出的XML示例,上述代码会依次输出:
red blue green
注意事项
XPathConstants.STRING类型仅适合明确知道只有一个匹配节点的场景,多节点场景下永远只会返回第一个匹配项的内容- 遍历得到的
Node对象支持标准DOM操作,你可以根据需要读取节点属性、父节点、子节点等内容,不局限于取文本值
内容的提问来源于stack exchange,提问作者Talktomegoose
相关产品推荐
相关产品推荐

