首页 > 解决方案 > 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>

这不起作用,不幸的是,我对如何使它起作用一无所知。有任何想法吗?

标签: xsltxpathxslt-1.0

解决方案


使用current()in<xsl:if test="../../fieldOption[. = current()/@value]">将外部上下文 ( init/fieldOption) 与谓词中的上下文进行比较。


推荐阅读