You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XSLT 1.0中从XML变量提取指定条目值?

解决XSLT中变量作为字典查询的问题

针对xsltproc(XSLT 1.0)

你定义的$mydict是结果树片段,并非可直接查询的节点集,所以XPath无法直接作用于它。需借助EXSLT的node-set()函数将其转换为节点集,步骤如下:

  1. 在XSLT根元素中声明EXSLT命名空间及扩展前缀:
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:exsl="http://exslt.org/common"
    extension-element-prefixes="exsl">
  1. 转换变量并执行查询:
<!-- 假设你有一个值为"c"的变量 -->
<xsl:variable name="target-key" select="'c'"/>

<!-- 将结果树片段转为节点集 -->
<xsl:variable name="mydict-nodes" select="exsl:node-set($mydict)"/>

<!-- 查询对应value值 -->
<xsl:value-of select="$mydict-nodes/dict/entry[@name=$target-key]/@value"/>

注意:你之前的写法$mydict//entry[@name="$c"]错误在于把变量$c放在了引号里,这会被当作字符串"$c"而非变量引用,正确写法是@name=$target-key。

针对最新版Saxon(XSLT 2.0+)

XSLT 2.0及以上版本中,结果树片段会自动被视为节点集,无需额外转换:

<xsl:variable name="target-key" select="'c'"/>
<!-- 直接查询即可 -->
<xsl:value-of select="$mydict/dict/entry[@name=$target-key]/@value"/>

如果使用XSLT 3.0,还可以直接将变量定义为原生字典(map),查询更高效简洁:

<xsl:variable name="mydict" as="map(xs:string, xs:string)" select="map {
    'a': '1',
    'b': '2',
    'c': '3',
    'd': '4'
}"/>

<!-- 直接通过键查询值 -->
<xsl:value-of select="$mydict('c')"/>

内容的提问来源于stack exchange,提问作者peterh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:19:56