我正在使用 xslt 来转换一些 xml 文件。我的输入数据如下所示:
<data>
<dataItem>
<value>24014</value>
<date>Feb 11, 2013</date>
</dataItem>
<dataItem>
<value>0</value>
<date>Feb 12, 2013</date>
</dataItem>
<dataItem>
<value>0</value>
<date>Feb 13, 2013</date>
</dataItem>
<dataItem>
<value>24627</value>
<date>Feb 14, 2013</date>
</dataItem>
<dataItem>
<value>0</value>
<date>Feb 15, 2013</date>
</dataItem>
</data>
我的输出数据需要如下所示:
<root>
<item>
<text>
Feb 14, 2013
</text>
</item>
</root>
换句话说,我正在寻找 value 元素不为 0 的最新日期元素。 dataItem 元素保证按递增的日期顺序排列(从文档顶部开始)。
我试图以递归方式处理这个问题,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template name="findDate">
<xsl:param name="list"/>
<xsl:choose>
<xsl:when test="value = 0">
<xsl:call-template name="findDate">
<xsl:with-param name="list" select="$list[position()!=1]"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<root>
<item>
<text>
<xsl:value-of select="label"/>
</text>
</item>
</root>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="/">
<xsl:call-template name="findDate">
<xsl:with-param name="list" select="//dataItem"/>
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>
但到目前为止,它不起作用,我得到的只是:
<root>
<item>
<text>
</text>
</item>
</root>
谁能看到我哪里出错了?
谢谢,
保罗