xsl排序不适用于xsl:apply-templates

时间:2019-01-01 19:53:49

标签: html xml xslt

我正在尝试通过以下指令减小直径来对有关行星数据的xml文件进行排序:

<xsl:sort select ="diametre" order="descending" data-type="number" />

但是xsl:sort不起作用:

<?xml version="1.0" ?>

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

<xsl:template match="//planete">
	<html lang="fr">
		<head>
			<title>Les planètes</title>
		</head>
		<body>
	<xsl:apply-templates/>
	</body>
	</html>
	</xsl:template>	
	
		<xsl:template match="systeme_solaire/planete" >
			<xsl:if test="nom!='Terre'">
			<xsl:sort select ="diametre" order="descending" data-type="number" />
			<ul>
			<p><b><xsl:value-of select="nom"/> : </b></p>
			<li>Distance au soleil: <xsl:value-of select="distance"/><xsl:value-of select="distance/@unit"/></li>
			<li>Masse: <xsl:value-of select="masse"/><xsl:value-of select="masse/@unit"/></li>
			<li>Diamètre: <xsl:value-of select="diametre"/><xsl:value-of select="diametre/@unit"/></li>
			<xsl:if test="satellite>0"><li>Nombre de satellites: <xsl:value-of select="satellite"/></li></xsl:if>
			</ul>
			</xsl:if>
		</xsl:template>
</xsl:stylesheet>

XML文件:

<?xml version="1.0" encoding="ISO-8859-1" ?>

<systeme_solaire>

<etoile>
	<nom>Soleil</nom>
	<type_spectral>G2</type_spectral>
	<age unit="milliard d'annees">5</age>
</etoile>


<planete type="tellurique">
	<nom>Mercure</nom>
	<distance unit="UA">0.4</distance>
	<masse unit="masse terrestre">0.06</masse>
	<diametre unit="diamètre terrestre">0.4</diametre>
</planete>

</systeme_solaire>

您能帮我找到为什么xsl:sort不按直径排序吗?

1 个答案:

答案 0 :(得分:2)

我猜你想做类似的事情:

XSLT 1.0

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

<xsl:template match="/systeme_solaire">
    <html lang="fr">
        <head>
            <title>Les planètes</title>
        </head>
        <body>
            <xsl:apply-templates select="planete[nom!='Terre']">
                <xsl:sort select ="diametre" order="descending" data-type="number" />
            </xsl:apply-templates>
        </body>
    </html>
</xsl:template> 

<xsl:template match="planete" >
    <ul>
        <p><b><xsl:value-of select="nom"/> : </b></p>
        <li>Distance au soleil: <xsl:value-of select="distance"/><xsl:value-of select="distance/@unit"/></li>
        <li>Masse: <xsl:value-of select="masse"/> <xsl:value-of select="masse/@unit"/></li>
        <li>Diamètre: <xsl:value-of select="diametre"/> <xsl:value-of select="diametre/@unit"/></li>
        <xsl:if test="satellite>0"><li>Nombre de satellites: <xsl:value-of select="satellite"/></li></xsl:if>
    </ul>
</xsl:template>

</xsl:stylesheet>