内部元素使用XSLT转换进行XML元素排序

时间:2015-12-01 07:42:10

标签: xml xslt element

假设我有以下XML,并且我想要XSLT转换,这会将<invoice>元素的排序更改为<paymentType>元素的值。 XSLT应该如何?

输入:

<invoices>
  <invoice>
    <paymentType>
      1
    </paymentType>
  </invoice>
  <invoice>
    <paymentType>
      2
    </paymentType>
  </invoice>
  <invoice>
    <paymentType>
      1
    </paymentType>
  </invoice>
</invoices>

期望的输出:

<invoices>
  <invoice>
    <paymentType>
      1
    </paymentType>
  </invoice>
  <invoice>
    <paymentType>
      1
    </paymentType>
  </invoice>
  <invoice>
    <paymentType>
      2
    </paymentType>
  </invoice>
</invoices>

修改 建议我提供我当前的XSLT,其中还包括此线程中标记答案的解决方案。欢迎任何改进建议。

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
<xsl:template match="/invoices">
    <xsl:copy>
        <xsl:apply-templates select="invoice">
            <xsl:sort select="paymentType" data-type="number" order="ascending"/>
        </xsl:apply-templates>
    </xsl:copy>
</xsl:template> 
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:1)

<xsl:template match="/invoices">
    <xsl:copy>
        <xsl:apply-templates select="invoice">
            <xsl:sort select="paymentType" data-type="number" order="ascending"/>
        </xsl:apply-templates>
    </xsl:copy>
</xsl:template> 

希望你知道其余的事情。