用XPath读取XML节点值需先写对表达式再调用API:加载文档→编译/执行XPath→获取textContent或nodeValue;Java用javax.xml.xpath,Python推荐lxml,注意命名空间、空格、编码及空值处理。

用 XPath 读取 XML 中指定节点的值,核心是写对表达式 + 调用对应 API。不同语言实现略有差异,但思路一致:加载 XML 文档 → 编译/执行 XPath 表达式 → 获取匹配节点的文本内容(textContent 或 nodeValue)。
XPath 常用语法快速定位节点
先确保表达式能准确命中目标节点:
-
/root/child:从根开始的绝对路径,匹配
下直接子元素 -
//name:任意位置的
元素(最常用) -
//person[@id='101']/name:匹配属性
id="101"的下的 -
//book[1]/title:第一个
的(注意索引从 1 开始) -
text():获取节点的纯文本内容,常用于取值,如
//title/text()
Java 中使用 XPath 读取节点值(JDK 内置)
无需额外依赖,用 javax.xml.xpath 包:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File("data.xml"));
XPath xpath = XPathFactory.newInstance().newXPath();
String expression = "//user/name/text()"; // 注意加 text()
String name = xpath.evaluate(expression, doc); // 直接返回字符串值
System.out.println(name); // 输出该节点的文本内容
⚠️ 注意:xpath.evaluate() 对单个节点返回字符串;若可能匹配多个,改用 XPathConstants.NODESET 并遍历。
Python 中用 lxml(推荐)或 xml.etree
lxml 示例(更强大、支持完整 XPath 1.0):
from lxml import etreetree = etree.parse("data.xml") result = tree.xpath("//product/price/text()") if result: print(result[0]) # 第一个 price 的文本值
标准库 xml.etree(轻量,XPath 支持有限):
import xml.etree.ElementTree as ETtree = ET.parse("data.xml") root = tree.getroot()
注意:etree 不支持 text() 函数,需先取元素再 .text
elem = root.find(".//price") # find 只支持简单 XPath if elem is not None: print(elem.text)










