我有以下XML:
<funds>
<bags>
<bag name="BAG_USD_MAIN" value="10.0" type="USD">
<pockets>
<pocket name="bank" value="7.5" expireDate="20130331" />
<pocket name="award" value="2.5" expireDate="20150501" />
</pockets>
</bag>
<bag name="BAG_USD_SAVINGS" value="290.75" type="USD">
<pockets>
<pocket name="bank" value="290.75" expireDate="20130331" />
</pockets>
</bag>
<bag name="BAG_EUR_EXTRA" value="890.0" type="EUR">
<pockets>
<pocket name="bank" value="753.0" expireDate="20131231" />
<pocket name="bank_eng" value="137.0" expireDate="20150501" />
</pockets>
</bag>
</bags>
</funds>
我想使用XSLT获取XML结果列表:
<bags>
<bag name="BAG_USD_MAIN" maxExpDate="20150501" />
<bag name="BAG_USD_SAVINGS" maxExpDate="20130331" />
<bag name="BAG_EUR_EXTRA" maxExpDate="20150501" />
</bags>
即,将“行李”分组并显示每个行李的最大过期日期。
可以用XSLT 2.0实现吗?怎么样?
谢谢
答案 0 :(得分:1)
您的输入XML无效(所有pocket
元素都未公开),但假设已修复,您可以在XSLT 1.0中执行此操作:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="bags">
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="bag">
<bag name="{@name}">
<xsl:apply-templates select="pockets/pocket/@expireDate">
<xsl:sort select="." data-type="number" />
</xsl:apply-templates>
</bag>
</xsl:template>
<xsl:template match="@expireDate">
<xsl:attribute name="maxExpDate">
<xsl:value-of select="." />
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
如果在输入XML上运行(在使其生效后),结果为:
<bags>
<bag name="BAG_USD_MAIN" maxExpDate="20150501" />
<bag name="BAG_USD_SAVINGS" maxExpDate="20130331" />
<bag name="BAG_EUR_EXTRA" maxExpDate="20131231" />
</bags>