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>
つまり、値要素が 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>
誰かが私が間違っているところを見ることができますか?
ありがとう、
ポール