0

我需要在从根检索值时根据元素的值重命名元素名称。

    <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,则应按上述方式发生。

请让我知道如何重命名此元素。

4

1 回答 1

0

请尝试替换这个:

        <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>

有了这个:

<!-- Ensure company_code is a valid number to prevent invalid tag names -->
<xsl:if test="number(dat:company_code) = number(dat:company_code)">
  <xsl:element name="Co{dat:company_code}">
    <xsl:value-of select="dat:total"/>
  </xsl:element>
</xsl:if>

您还需要 删除<xsl:element name="{local-name()}"> . <xsl:for-each>它是未封闭的,似乎没有必要。

于 2013-01-04T21:22:20.947 回答