目前我有以下XML。在这个例子中,我使用了4个fieldOptions
,但它增加到了50多个。
<filterItem>
<field name="incidentState" fieldLabel="Status" type="filterType" mandatory="false">
<fieldOption><![CDATA[0]]></fieldOption>
<fieldOption><![CDATA[1]]></fieldOption>
<fieldOption><![CDATA[4]]></fieldOption>
<init>
<fieldOption value="0">Geen</fieldOption>
<fieldOption value="2">Registratie</fieldOption>
<fieldOption value="3">Analyse</fieldOption>
<fieldOption value="4">Plannen</fieldOption>
<init> </init>
</init>
</field>
</filterItem>
在这种情况下,我希望输出创建3个li
元素。首先是包含字段节点的fieldLabel的li
元素。其他li
元素应该是value
属性等于../../fieldOption
文本的每个init/fieldOption
。由于一个例子使它更清晰,这就是我想要的输出:
<li>Status</li>
<li>Geen</li>
<li>Plannen</li>
我使用以下XSLT:
<xsl:template match="filterItem">
<ul id="filter_{field/@name}">
<li>
<xsl:value-of select="field/@fieldLabel"/>
</li>
<xsl:for-each select="field/init/fieldOption">
<xsl:if test="../../fieldOption[. = @value]">
<li>
<xsl:value-of select="." />
</li>
</xsl:if>
</xsl:for-each>
</ul>
</xsl:template>
这不起作用,不幸的是,我不知道如何才能让它发挥作用。有什么想法吗?
在<xsl:if test="../../fieldOption[. = current()/@value]">
中使用current()
将外部上下文(init/fieldOption
(与谓词中的上下文进行比较。