xslt - XPath:检查具有值的父兄弟是否等于每个值
问题描述
目前我有以下 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
元素。首先是一个li
包含字段节点的 fieldLabel 的元素。其他li
元素应该是每个属性等于文本init/fieldOption
的元素。由于一个例子使它更清楚,这是我想要的输出:value
../../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>
这不起作用,不幸的是,我对如何使它起作用一无所知。有任何想法吗?
解决方案
使用current()
in<xsl:if test="../../fieldOption[. = current()/@value]">
将外部上下文 ( init/fieldOption
) 与谓词中的上下文进行比较。
推荐阅读
- cpanel - 如何将域设置为子文件夹作为根域,然后显示子文件夹?
- windows - Idea终端显示错误的gradle版本
- android - ListView 操作在恢复时重置
- javascript - 使用 Webpack 提取 CSS 时抑制模块输出
- json - 如何在火花中非规范化 JSON
- objective-c - Objective-C 用 _Nonnull 参数覆盖 _Nullable 参数
- amp-html - 新的 AMP 网站需要哪些组件?
- laravel - 无法将 Office365 连接到 Laravel 邮件
- ruby - 多行代码的 Ruby 性能
- r - 使用列表来简化 R 中的代码