XSLT技术问题:从<ITEM>的祖先节点按优先级获取<EFFECT>元素值
按优先级从祖先节点获取内容的解决方案
针对你当前定位在<ITEM>标签,需要按优先级获取<EFFECT>内容的需求,用XPath就能完美解决这个层级查找问题!
核心思路
严格按照你指定的优先级规则执行:
- 优先读取
<ITEM>直接父节点<parent>内的<EFFECT>值 - 若父节点无该元素,读取上层
<parent2>内的<EFFECT>值 - 前两者都不存在时,直接取根节点
<root>内的<EFFECT>值(题目说明该元素始终存在,作为保底选项)
具体XPath表达式
(../EFFECT | ../../EFFECT | /root/EFFECT)[1]
表达式细节解释
../EFFECT:从当前<ITEM>节点向上跳转1级(到直接父节点<parent>),查找该节点下的所有<EFFECT>元素../../EFFECT:如果父节点未匹配到<EFFECT>,再向上跳转1级(到祖父节点<parent2>),查找该节点下的<EFFECT>元素/root/EFFECT:如果前两层都无匹配结果,直接定位到根节点<root>下的<EFFECT>,确保有返回值[1]:取所有匹配结果中的第一个元素(适配每个层级可能存在多个<EFFECT>的场景)
扩展适配
因为题目提到<ITEM>可拥有任意数量父节点,若后续层级增加,只需按“从近到远”的顺序继续扩展表达式即可,示例如下:
(../EFFECT | ../../EFFECT | ../../../EFFECT | /root/EFFECT)[1]
这样就能始终遵循“最近祖先节点优先”的规则,获取到你需要的<EFFECT>内容啦!
内容的提问来源于stack exchange,提问作者Adhitya
相关产品推荐
相关产品推荐

