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
值 - 在这种情况下,您的问题是关于分组,您可以在此处找到答案。