<xsl:sort> 无法使用 <xsl:apply-templates> 以 table 形式显示数据

<xsl:sort> not working with <xsl:apply-templates> to display data in table form

我正在尝试使用 <xsl:sort> 按属性 @animalName 在 XML 文件,同时使用 <xsl:apply-templates> 在 table 中显示动物,但它似乎不起作用。有什么建议吗?

XML 文件


   <animal animalName="Giraffe" animalId="No. 9">
       <animalNamesInfo scientificName="Giraffa camelopardalis"> </animalNamesInfo>
   </animal>
   <animal animalName="Chimopanzee" animalId="No. 7" >
       <animalNamesInfo scientificName="Pan troglodytes"> </animalNamesInfo>
   </animal>
    <animal animalName="Zebra" animalId="No. 6" >
       <animalNamesInfo scientificName="Equus quagga bοehmi"> </animalNamesInfo>
   </animal>

和xsl代码

  

    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
     <HTML>
      <BODY>
       <table border="5">
        <th>animal_name</th>
        <th>scientific_name</th>
        <xsl:apply-templates select="//animal"/>
         <xsl:sort select = "@animalName" />
       </table>
      </BODY>
     </HTML>
    </xsl:template>
    
    
    <xsl:template match="animal">
     <tr>
      <td><xsl:value-of select="@animalName"/></td>
      <td><xsl:value-of select="animalNamesInfo/@scientificName"/></td>
     </tr>
    </xsl:template>
    </xsl:stylesheet>

这是由于一个小的语法错误:xsl:sort 必须是 xsl:apply-templates 的子代。所以把这部分改成

<xsl:template match="/">
 <HTML>
  <BODY>
   <table border="5">
    <th>animal_name</th>
    <th>scientific_name</th>
    <xsl:apply-templates select="//animal">
     <xsl:sort select = "@animalName" />
    </xsl:apply-templates>
   </table>
  </BODY>
 </HTML>
</xsl:template>

然后,一切正常。