XSLT如何在<apply-templates> </apply-templates>中进行排序

时间:2014-02-11 01:46:12

标签: xml xslt

您好我正在从w3schools学习XML,现在我正在研究上面这个例子。 我了解到我们可以在for-each中使用并理解这一点。 但现在我试图使用内部,但它不起作用。 我已经在很多方面进行过测试,但没有任何效果,任何人都可以提供一点帮助吗?

 <?xml version="1.0" encoding="ISO-8859-1"?>
    <!-- Edited by XMLSpy® -->
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/">
      <html>
      <body>
      <h2>My CD Collection</h2>  
      <xsl:apply-templates/>  
      </body>
      </html>
    </xsl:template>

    <xsl:template match="cd">
      <p>
        <xsl:apply-templates select="title">
          <xsl:sort select="title" order="descending" /> <!--The sort script-->
        </xsl:apply-templates>  
        <xsl:apply-templates select="artist"/>
      </p>
    </xsl:template>

    <xsl:template match="title">
      Title: <span style="color:#ff0000">
      <xsl:value-of select="."/></span>
      <br />
    </xsl:template>

    <xsl:template match="artist">
      Artist: <span style="color:#00ff00">
      <xsl:value-of select="."/></span>
      <br />
    </xsl:template>

    </xsl:stylesheet>

XML

 <?xml version="1.0" encoding="UTF-8"?>
    <!-- Edited by XMLSpy -->
    <catalog>
        <cd>
            <title>Empire Burlesque</title>
            <artist>Bob Dylan</artist>
            <country>USA</country>
            <company>Columbia</company>
            <price>10.90</price>
            <year>1985</year>
        </cd>
        <cd>
            <title>Hide your heart</title>
            <artist>Bonnie Tyler</artist>
            <country>UK</country>
            <company>CBS Records</company>
            <price>9.90</price>
            <year>1988</year>
        </cd>
        <cd>
            <title>Greatest Hits</title>
            <artist>Dolly Parton</artist>
            <country>USA</country>
            <company>RCA</company>
            <price>9.90</price>
            <year>1982</year>
        </cd>


    </catalog>

2 个答案:

答案 0 :(得分:0)

您似乎希望按艺术家排序 cds ,而不是按艺术家标题排序。你无法通过艺术家直接对标题进行排序,因为艺术家不是标题的孩子。无论如何,除非你在CD中拥有多个头衔,否则无关紧要。

答案 1 :(得分:0)

你必须根据“标题”对“cd”进行排序,这就是我认为你正在寻找的方式:

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

<xsl:template match="/">
  <html>
      <body>
          <h2>My CD Collection</h2>  
          <xsl:apply-templates select="catalog/cd">  
                <xsl:sort select="title" order="descending"/>
          </xsl:apply-templates>
      </body>
  </html>
</xsl:template>

<xsl:template match="cd">
  <p>
    <xsl:apply-templates select="title" />
    <xsl:apply-templates select="artist"/>
  </p>
</xsl:template>

<xsl:template match="title">
  Title: <span style="color:#ff0000">
  <xsl:value-of select="."/></span>
  <br />
</xsl:template>

<xsl:template match="artist">
  Artist: <span style="color:#00ff00">
  <xsl:value-of select="."/></span>
  <br />
</xsl:template>
</xsl:stylesheet>