2015-06-25 8 views
3

У меня есть эти два файла:XSL сортировать и каждый

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 не сортирует. У меня нет выхода. Я действительно не знаю, как это не работает. Код кажется правильным. Если вы снимете тег сортировки, вы увидите результат. В пределах сортировки вы ничего не увидите.

ответ

1

Вам необходимо переместить xsl:sort, чтобы быть первым ребенком xsl:for-each. Он недействителен там, где он сейчас.

Возможно, вы также захотите изменить свой 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> 
+1

Отлично! Спасибо, мужик! – Vito

Смежные вопросы