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>
我有这两个文件:
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>