我正在使用Saxon HE 9-4-0-3J。我的意圖是使用xsl:apply-templates
上的select
屬性遍歷每個<RECORD>
元素,但xml中只有一個<RECORD>
元素正在處理中。xsl:apply-templates不會遍歷選擇的每個節點
XML
<ENVELOPE>
<PRODUCT>
<HEAD><FLAG>No</FLAG></HEAD>
<BODY>
<RECORD><Value>9</Value></RECORD>
<RECORD><Value>10</Value></RECORD>
<MISC>9</MISC>
</BODY>
</PRODUCT>
XSLT 2.0
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/ENVELOPE">
<Interface>
<Data><xsl:apply-templates select="PRODUCT"/></Data>
</Interface>
</xsl:template>
<xsl:template match="PRODUCT">
<xsl:choose>
<xsl:when test="HEAD/FLAG='Yes'">
<xsl:attribute name="Match">Affirmative</xsl:attribute>
<xsl:apply-templates select="BODY/RECORD" mode="affr"/>
</xsl:when>
<xsl:when test="HEAD/FLAG='No'">
<xsl:attribute name="Match">Negative</xsl:attribute>
<xsl:apply-templates select="BODY/RECORD" mode="neg"/>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="RECORD" mode="affr">
<xsl:attribute name="Value"><xsl:value-of select="Value"/></xsl:attribute>
</xsl:template>
<xsl:template match="RECORD" mode="neg">
<xsl:attribute name="Value"><xsl:value-of select="Value"/></xsl:attribute>
</xsl:template>
</xsl:stylesheet>
輸出
<Interface>
<Data Match="Negative" Value="9"/> <!-- this line doesn't appear, I want it to -->
<Data Match="Negative" Value="10"/>
</Interface>
您的第一段非常有意義,謝謝您幫助我瞭解我出錯的位置。 – 2012-04-14 15:49:21