如何使用XSLT获取包含指定子元素的父节点?
嘿,我来帮你搞定这个XPath的问题~你之前的表达式没生效是因为路径定位和节点选择的逻辑出了点小问题,咱们一步步来修正:
错误原因分析
你的表达式 ./levels[/level/teams/team/name = 'Dallas Stars'] 有两个核心问题:
- 你实际要选的是单个**
level节点**(也就是东西部赛区),但当前表达式是在筛选整个levels容器,方向错了; /level是从文档根节点开始查找,而不是相对于levels的子节点,路径定位偏差了。
正确的XPath写法
这里给你几个实用的写法,适配不同场景:
写法1:基础精准匹配(XPath 1.0及以上通用)
如果是从根节点NCAAScores下开始查找,直接用:
./levels/level[teams/team/name = 'Dallas Stars']
或者想全局查找所有符合条件的level节点,可以简化成:
//level[teams/team/name = 'Dallas Stars']
写法2:处理文本空格的严谨版
如果担心name节点里有多余的空格(比如换行、空格),可以用normalize-space()统一处理:
./levels/level[normalize-space(teams/team/name) = 'Dallas Stars']
写法3:XPath 2.0+专属(更清晰的存在性判断)
如果你用的是支持XPath 2.0及以上的工具,也可以用exists()明确判断是否存在符合条件的球队:
./levels/level[exists(teams/team[name = 'Dallas Stars'])]
逻辑说明
这些写法的核心逻辑都是:
- 先定位到所有
levels下的level子节点; - 通过谓词
[...]筛选出自身包含名称为'Dallas Stars'的球队的level节点。
这样就能精准拿到所有包含该球队的赛区节点啦~
内容的提问来源于stack exchange,提问作者sahaS
相关产品推荐
相关产品推荐

