XSLT通过XPath选取含指定子节点的mynode并获取对应element1值
问题原因
你原来的写法错误在于,谓词内的./name()=$col是取当前mynode节点的名称和变量$col比对,mynode节点名显然不等于element2,过滤逻辑完全不匹配需求。
正确解决方案
直接调整XPath谓词的过滤范围即可,不需要遍历节点,XPath原生查询就可以高效处理大体积XML的匹配需求:
<xsl:variable name="col" select="/translation/col" /> <xsl:variable name="cont" select="/translation/cont" /> <xsl:value-of select="/mynodes/mynode[*[name()=$col and normalize-space(.)=$cont]]/element1" />
逻辑说明
- 谓词内层的
*匹配mynode的所有直接子元素 - 先过滤出「子元素名等于
$col、子元素文本值等于$cont」的mynode节点 - 最后取符合条件的
mynode下的element1文本值 - 额外加了
normalize-space()是为了兼容子节点文本前后有空白字符的场景,如果可以保证文本没有多余空白可以去掉。
你提供的示例XML执行后会得到结果c,符合预期。
内容的提问来源于stack exchange,提问作者Michael Glöckner
相关产品推荐
相关产品推荐

