使用XPath选取指定元素的第一个子元素返回空的问题排查
你写的两个XPath表达式//main[@id='main2']/*[first()]和//main[@id='main2']/*[1]语法本身没有错误,返回空结果的核心原因如下:
/*规则仅匹配目标元素的元素类型子节点,不会匹配文本节点、注释节点、处理指令等其他类型的子节点- 你所确认存在的第一个子节点如果是非元素类型(最常见的是XML/HTML排版产生的换行、缩进空白文本节点,或者注释节点),这两个表达式就无法匹配到符合要求的元素节点,因此返回null。
解决方案
根据你的实际需求选择对应写法:
- 若要获取所有类型子节点中的第一个(不限节点类型,符合你说的“不限元素类型”要求):
//main[@id='main2']/node()[1] - 若确实需要获取第一个元素类型的子节点,先单独执行
//main[@id='main2']确认能正确匹配到目标元素,再排查目标元素下是否真的存在元素类型的子节点即可。另外部分运行环境对first()函数支持度有限,优先使用[1]的写法兼容性更好。
内容的提问来源于stack exchange,提问作者jmath412
相关产品推荐
相关产品推荐

