用XPath读取XML节点值需先写对表达式再调用API:加载文档→编译/执行XPath→获取textContent或nodeValue;Java用javax.xml.xpath,Python推荐lxml,注意命名空间、空格、编码及空值处理。
用 XPat
h 读取 XML 中指定节点的值,核心是写对表达式 + 调用对应 API。不同语言实现略有差异,但思路一致:加载 XML 文档 → 编译/执行 XPath 表达式 → 获取匹配节点的文本内容(textContent 或 nodeValue)。
先确保表达式能准确命中目标节点:
下直接子元素
元素(最常用)id="101" 的 下的
的 (注意索引从 1 开始)//title/text()
无需额外依赖,用 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 并遍历。
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)
xmlns 时,XPath 必须声明并使用前缀,否则查不到节点//node/text() 可能返回空白字符串,建议用 normalize-space() 处理,如 normalize-space(//name)