サクソン HE 9-4-0-3J を使用しています。私の意図は、select
on 属性を使用xsl:apply-templates
して各要素を反復処理することですが、xml 内の<RECORD>
単一の要素のみが処理されています。<RECORD>
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>