ルートから値を取得するときに、要素の値に基づいて要素名を変更する必要があります。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dat="http://ws.wso2.org/dataservice" version="1.0">
<xsl:key name="key-by-company_code" match="dat:row" use="dat:company_code" />
<xsl:template match="company_code">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="dat:rows">
<xsl:element name="{local-name()}">
<xsl:for-each select="dat:row[generate-id() = generate-id(key('key-by-company_code', dat:company_code)[1])]">
<xsl:element name="sae">
<xsl:attribute name="filename">
<xsl:value-of select="dat:company_code" />
</xsl:attribute>
<xsl:for-each select="key('key-by-company_code', dat:company_code)">
<xsl:element name="{local-name()}">
<xsl:element name="row">
<xsl:element name="sae_id">
<xsl:value-of select="@sae_id" />
</xsl:element>
<xsl:element name="sae_date">
<xsl:value-of select="@sae_date" />
</xsl:element>
<xsl:if test="'company_code' = local-name()">
<xsl:if test="dat:company_code = '30'">
<xsl:template match="company_code">
<Co30>
<xsl:apply-templates/>
</Co30>
</xsl:template>
</xsl:if>
</xsl:if>
<xsl:element name="payment_type">
<xsl:value-of select="dat:payment_type" />
</xsl:element>
<xsl:element name="concur_pay">
<xsl:variable name="Concur-Pay" select="dat:concur_pay" />
<xsl:choose><xsl:when test="$Concur-Pay = '0'">N</xsl:when><xsl:otherwise>Y</xsl:otherwise></xsl:choose>
</xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
上記は、要件に使用しようとしている xslt ですが、機能しません。要素の値に基づいて要素名の名前を変更し、別の要素から値を割り当てる必要があります。例:- company_code が 30 の場合、出力は次のようになります。
<sae filename="30">
<row>
<sae_id>76</sae_id>
<sae_date>2012-12-07-08:00</sae_date>
<Co30>1286.91</Co30>
<payment_type>CASH</payment_type>
<concur_pay>N</concur_pay>
<total>1286.91</total>
</row>
</sae>
ここで、要素「total」の値を「Co 30」に割り当てる必要があります。同様に、company_code が 32、33、または 36 の場合、上記のようになります。
この要素の名前を変更する方法を教えてください。