我有以下xml:
<main>
<cat>
<id>12</id>
<name>Pizza-Tuno</name>
<depends>
<depend>
<id>2</id>
<name>Tuno</name>
<type>Food</type>
</depend>
<depend>
<id>122</id>
<name>Knife</name>
<type>Tool</type>
</depend>
<depend>
<id>1123</id>
<name>Water</name>
<type>Food</type>
</depend>
<depend>
<id>417</id>
<name>Scissors</name>
<type>Tool</type>
</depend>
</depends>
</cat>
</main>
目前我有这个xsl:
<html>
<body>
Foods:
<ul>
<xsl:apply-tempaltes match="main/cat" />
</ul>
Tools:
<ul>
<xsl:apply-tempaltes match="main/cat" />
</ul>
</body>
</html>
<xsl:template match="main/cat">
<li>
<xsl:value-of select="name" />
</li>
</xsl:template>
我想要这个输出:
<html>
<body>
Foods:
<ul>
<li>Tuno</li>
<li>Water<li/>
</ul>
Tools:
<ul>
<li>Knife</li>
<li>Scissors</li>
</ul>
</body>
</html>
我怎么能用xsl做到这一点?元素应该除以元素..
答案 0 :(得分:3)
通常xsl:apply-templates
以所谓的文档顺序处理节点。要更改节点的顺序,您可以在xsl:sort
调用中包含xsl:apply-templates
指令。
<xsl:apply-templates select="...">
<xsl:sort select="..."/>
</xsl:apply-templates>
注意,默认排序是按ASCII顺序应用的。但是你可以告诉处理器你真的想按数字排序:
<xsl:sort select="..." data-type="number"/>
话虽如此,您的XSLT需要通过以下方式进行修改:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="document-node()">
<html>
<body>
Foods:
<ul>
<xsl:apply-templates select="main/cat/depends/depend[type = 'Food']">
<xsl:sort select="id" data-type="number"/>
</xsl:apply-templates>
</ul>
Tools:
<ul>
<xsl:apply-templates select="main/cat/depends/depend[type = 'Tool']">
<xsl:sort select="id" data-type="number"/>
</xsl:apply-templates>
</ul>
</body>
</html>
</xsl:template>
<xsl:template match="depend">
<li>
<xsl:value-of select="name" />
</li>
</xsl:template>
</xsl:stylesheet>