xslt:键与 contains(text(),

问题描述 投票:0回答:1

我必须使用 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>

有什么想法出了什么问题吗?

谢谢 马库斯

xslt xslt-1.0 xslkey
1个回答
0
投票

您在比赛中选择了

FlagValues
(并且
FlagValues
没有孩子
Name
)。

尝试选择

Alarm
...

<xsl:key name="alarmNodes" match="Root/Alarm[contains(FlagValues, 'Formatted')]" use="Name" />

您的

test
xsl:when
中也存在引用问题,但您会遇到异常,因此这可能只是一个拼写错误。

© www.soinside.com 2019 - 2024. All rights reserved.