XPath:检查具有值的父同级是否等于每个值

时间:2018-07-27 08:58:43

标签: xslt xpath xslt-1.0

目前,我有以下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>

这是行不通的,不幸的是,我对如何使它正常工作一无所知。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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