XSL内部的for-eash逻辑少于2



big xml的示例xml:

<result type="FLP" id="FL">
    <PPR>
        <PP>
            <FID id="L1001">18084</FID>
            <FNAME id="L1002">some text </FNAME>
            <PRM_KEY id="L1349">Yes</PRM_KEY>
            <CURRENCY_CODE id="L1821">CAD</CURRENCY_CODE>
        </PP>
        <PP>
            <FID id="L1001">18084</FID>
            <FNAME id="L1002">some text </FNAME>
            <PRM_KEY id="L1349">No</PRM_KEY>
            <CURRENCY_CODE id="L1821">CAD</CURRENCY_CODE>
        </PP>
        <PP>
            <FID id="L1001">18084</FID>
            <FNAME id="L1002">some text </FNAME>
            <PRM_KEY id="L1349">Yes</PRM_KEY>
            <CURRENCY_CODE id="L1821">USD</CURRENCY_CODE>
        </PP>
        <PP>
            <FID id="L1001">18084</FID>
            <FNAME id="L1002">some text </FNAME>
            <PRM_KEY id="L1349">No</PRM_KEY>
            <CURRENCY_CODE id="L1821">CAD</CURRENCY_CODE>
        </PP>
        <PP>
            <FID id="L1001">18084</FID>
            <FNAME id="L1002">some text </FNAME>
            <PRM_KEY id="L1349">Yes</PRM_KEY>
            <CURRENCY_CODE id="L1821">EUR</CURRENCY_CODE>
        </PP>
    </result>

当prm_key为YES时,我只想在我的表TD下显示fname值,但是fname值显示三次,因为crurners_code没有条件。我想在PRM_KEY为YES时仅显示一次fname。我尝试了XSL条件以下,但这无济于事,因为计数值始终是一个

    <xsl:for-each select="/result[@type='FLP']/PPR/PP[PRM_KEY = 'Yes'] and count(CURRENCY_CODE) < 2">
    <tr>
    <td><xsl:value-of select="FNAME"/></td>
<h4>count val is: <xsl:value-of select="count(CURRENCY_CODE)"/></h4>
    </tr>
    </xsl:for-each>

您感兴趣的"记录"(项目(是 PP标签, PRM_KEY = 'Yes'

然后,您想将它们分为相等的FNAME

对于要显示的上述每个组:

  • FNAME(组中的所有项目相等(,
  • (在此组中(有多少个项目定义了CURRENCY_CODE

下面您有一个执行此任务的XSLT脚本:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
  <xsl:strip-space elements="*"/>
  <xsl:key name="ppItems" match="PP[PRM_KEY = 'Yes']" use="FNAME"/>
  <xsl:template match="result[@type='FLP']/PPR">
    <table>
      <xsl:for-each select="PP[generate-id() = generate-id(key('ppItems', FNAME)[1])]">
        <xsl:variable name="kk" select="key('ppItems', FNAME)"/>
        <tr>
          <td><xsl:value-of select="FNAME"/></td>
          <td>Count: <xsl:value-of select="count($kk/CURRENCY_CODE)"/></td>
        </tr>
      </xsl:for-each>
    </table>
  </xsl:template>
</xsl:transform>

为了保持HTML的正确结构,我更改了您的h4标签进入另一个td

我对prm_key是肯定的要求,然后它的fname应该显示 由于所有fname值都是相同的,因此只能显示一次。

如果我从字面上接受您的要求,那么当至少一个PP满足PRM_KEY='Yes'的状况时,应该足以显示第一个fname值。可以非常简单地完成此操作,而无需使用xsl:for-each

<xsl:template match="/result">
    <xsl:if test="PPR/PP[PRM_KEY='Yes']">
        <output>
            <xsl:value-of select="PPR/PP[1]/FNAME" />
        </output>
    </xsl:if>
</xsl:template>

otoh,您可能要显示每个不同的 FNAME值 - 在这种情况下,您的问题是关于分组,您可以在此处找到答案。

相关内容

  • 没有找到相关文章

最新更新