假設下面的XML輸入...根據XSL中的條件動態輸出元素?
<incidents>
<incident>
<year>2011</year>
<other data here>
</incident>
<incident>
<year>2009</year>
<other data here>
</incident>
<incident>
<year>2006</year>
</incident>
</incidents>
的XML總是逐年預先排序,以便最近發生的事件今年是第一次。我需要使用xsl來處理它,並且基本上以最少的轉換輸出數據,最多5年,但如果缺少任何年份,我只需要輸出<incident><year>missingYear</year></incident>
的元素。
因此,假設我有正確的XSL要做到這一點,處理上面的XML將產生此...
<incidents>
<incident>
<year>2011</year>
</incident>
<incident>
<year>2010</year>
</incident>
<incident>
<year>2009</year>
</incident>
<incident>
<year>2008</year>
</incident>
<incident>
<year>2007</year>
</incident>
<incident>
<year>2006</year>
</incident>
</incidents>
我能走到今天與XSL,但它不佔之間較大的差距年
<xsl:variable name="maxYear" select="/incidents/incident/year[1]"></xsl:variable>
<xsl:template match="incidents" >
<xsl:element name="incident">
<xsl:for-each select="incident">
<xsl:variable name="currentYear" select="year"/>
<xsl:choose>
<xsl:when test="($maxYear - (position() -1)) != $currentYear">
<!-- output the missing year -->
<xsl:element name="year"> <xsl:value-of select="($maxYear - (position() -1))" /></xsl:element>
<!-- output the current year node -->
<xsl:element name="year"> <xsl:value-of select="$currentYear" /></xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="year"> <xsl:value-of select="$currentYear" /></xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:element>
</xsl:template>
我已經更新了原來的問題,但現在回想起來,我認爲你是對的....我可以得到當年的XSL,然後就回送從他們的5次,每次檢查是否'year'在源xml中可用,如果沒有,只需創建該元素。不知道爲什麼我讓我的難度超過需求;感謝您的啓發 – raffian 2012-02-01 02:01:32