XSL 排序和每个

XSL sort and each

我有这两个文件:

XML

<?xml version="1.0" encoding="UTF-8"?>

<Store>
    <Plant id="10">
        <Common>Pianta carnivora</Common>
        <Botanical>Dionaea muscipula</Botanical>
        <Quantity>10</Quantity>  
    </Plant>
    <Flower id="3">
        <Common>Fiore di prova</Common>
        <Quantity>999</Quantity>
    </Flower>
    <Plant id="20">
        <Common>Canapa</Common>
        <Botanical>Cannabis</Botanical>
        <Quantity>2</Quantity>  
    </Plant>    

    <Plant id="30">
        <Common>Loto</Common>
        <Botanical>Nelumbo Adans</Botanical>
        <Quantity>3</Quantity>  
    </Plant>    

</Store>

XSL

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/">
        <html>
            <xsl:apply-templates/>
        </html>
    </xsl:template>

    <xsl:template match="Store">
        <body>
            <xsl:for-each select="Plant">
                <p>
<xsl:sort select="Quantity"/>   
<xsl:value-of select="Quantity"/>

                </p>
            </xsl:for-each>
        </body>
    </xsl:template>


</xsl:stylesheet>

XSL 未排序。我没有任何输出。我真的不知道它怎么行不通。该代码似乎是正确的。如果你去掉 sort 标签,你会看到输出。在排序中,您将看不到任何内容。

您需要将您的 xsl:sort 移动到 xsl:for-each 的第一个 child。现在的位置无效。

您可能还想将 data-type 更改为 number

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/">
        <html>
            <xsl:apply-templates/>
        </html>
    </xsl:template>

    <xsl:template match="Store">
        <body>
            <xsl:for-each select="Plant">
                <xsl:sort select="Quantity" data-type="number"/>
                <p>
                    <xsl:value-of select="Quantity"/>
                </p>
            </xsl:for-each>
        </body>
    </xsl:template>

</xsl:stylesheet>

你也可以用 xsl:apply-templates 做同样的事情...

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/Store">
        <html>
            <body>
                <xsl:apply-templates select="Plant/Quantity">
                    <xsl:sort data-type="number"/>
                </xsl:apply-templates>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="Quantity">
        <p><xsl:value-of select="."/></p>
    </xsl:template>

</xsl:stylesheet>