如何使用xslt从文档中进行排序?

时间:2012-02-20 10:27:43

标签: xml xslt xpath

下面的

document_1.xml

<products>
    <product>
        <name>Pen</name>
        <Quantity>30</Quantity>
    </product> 
    <product>
        <name>Pencil</name>
        <Quantity>20</Quantity>
    </product>
    <product>
        <name>Bag</name>
        <Quantity>25</Quantity>
    </product>
</products>

document_2.xml

<products>
    <product>
        <name>Pen</name>
        <Quantity>10</Quantity>
    </product> 
    <product>
        <name>Pencil</name>
        <Quantity>5</Quantity>
    </product>
    <product>
        <name>Bag</name>
        <Quantity>2</Quantity>
    </product>
</products>

document.xml

<products>
</products>

以下是我的xsl,我曾经加入document_1.xmldocument_2.xml加入document.xml

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>

<xsl:template match="/products">
<xsl:copy>
<xsl:apply-templates select="document('document_1.xml')/*/product"/>
<xsl:apply-templates select="document('document_2.xml')/*/product"/>
</xsl:copy>
</xsl:template>

<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()">
</xsl:apply-templates>
</xsl:copy>
</xsl:template>

</xsl:stylesheet>

我需要输出如下

  1. 按数量ASC排序

    <products>
        <product>
            <name>Bag</name>
            <Quantity>2</Quantity>
        </product>
        <product>
            <name>Pencil</name>
            <Quantity>5</Quantity>
        </product>
        <product>
            <name>Pen</name>
            <Quantity>10</Quantity>
        </product>
        <product>
            <name>Pencil</name>
            <Quantity>20</Quantity>
        </product>
        <product>
            <name>Bag</name>
            <Quantity>25</Quantity>
        </product>
        <product>
            <name>Pen</name>
            <Quantity>30</Quantity>
        </product> 
    

1 个答案:

答案 0 :(得分:1)

xsl:sort标记,但它只能在xsl:for-each循环内使用 - 例如。

<xsl:for-each select="document('document_1.xml')/*/product|document('document_2.xml')/*/product">
  <xsl:sort select="Quantity" data-type="number" />
  ...
</xsl:for-each>