我必须使用 xslt 1.0 并且我有以下 xml:
<Root>
<Alarm>
<Name>short</Name>
<FlagValues>Client, RunTime, Language</FlagValues>
</Alarm>
<Alarm>
<Name>long</Name>
<FlagValues>Client, Formatted, RunTime, Language</FlagValues>
</Alarm>
</Root>
在 xslt 转换开始时,我想使用 xsl:key 创建一个映射...... 我需要所有“Alarm”节点,其中字符串“Formatted”位于“FlagValues”节点中。密钥应该是“名称”。
所以这是我的尝试:
<xsl:key name="alarmNodes" match="Root/Alarm/FlagValues[contains(text(), 'Formatted')]" use="Name" />
但是当我尝试访问它时,它是空的:
<xsl:when test="key('alarmNodes', "'long'")">
我的预期结果是一个包含以下内容的节点对象:
<Alarm>
<Name>long</Name>
<FlagValues>Client, Formatted, RunTime, Language</FlagValues>
</Alarm>
有什么想法出了什么问题吗?
谢谢 马库斯
您在比赛中选择了
FlagValues
(并且 FlagValues
没有孩子 Name
)。
尝试选择
Alarm
...
<xsl:key name="alarmNodes" match="Root/Alarm[contains(FlagValues, 'Formatted')]" use="Name" />
您的
test
的 xsl:when
中也存在引用问题,但您会遇到异常,因此这可能只是一个拼写错误。