2012-03-22 18 views
7

私は、多くのことを行う割り当てのためにかなり大きなXSLドキュメントを持っています。それはほぼ完了していますが、私はそれがソートされなければならないという要件を逃してしまいました。ここには何が起こっているのSSCCEがあります。xsl:ソートしないapply-templatesで並べ替え

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<!-- Root Document --> 
<xsl:template match="/"> 

    <html> 
    <body> 

     <xsl:apply-templates select="staff"> 
      <xsl:sort select="member/last_name" /> 
     </xsl:apply-templates> 

    </body> 
    </html> 

</xsl:template> 

<xsl:template match="member"> 
    <xsl:value-of select="first_name" />&#160;<xsl:value-of select="last_name" /> <br/> 
</xsl:template> 

</xsl:stylesheet> 

は、XMLファイルは、この

<?xml version="1.0" encoding="UTF-8"?> 

<?xml-stylesheet type="text/xsl" href="sort.xsl"?> 

<staff> 
    <member> 
     <first_name>Joe</first_name> 
     <last_name>Blogs</last_name> 
    </member> 

    <member> 
     <first_name>John</first_name> 
     <last_name>Smith</last_name> 
    </member> 

    <member> 
     <first_name>Steven</first_name> 
     <last_name>Adams</last_name> 
    </member> 

</staff> 

のように見える私は、スタッフが最後の名前で記載されていることを期待していたが、彼らは、ソート取得されていません。私はXSLTで非常に経験が浅いことに留意してください。

答えて

20
<xsl:apply-templates select="staff"> 
     <xsl:sort select="member/last_name" /> 
    </xsl:apply-templates> 

は、staff要素を選択してソートしますが、staff要素は1つしかないため、これはノーオペレーションです。すべてのメンバーの要素を選択し、それらをソートし、その後

<xsl:apply-templates select="staff/member"> 
     <xsl:sort select="last_name" /> 
    </xsl:apply-templates> 

変更。欠けているもの

3

スタッフマッチングテンプレートであるか、このいずれかのようにメンバーに一致するテンプレートを変更します。

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<!-- Root Document --> 
<xsl:template match="/"> 

    <html> 
    <body> 

     <xsl:apply-templates select="staff/member"> 
      <xsl:sort select="last_name" /> 
     </xsl:apply-templates> 

    </body> 
    </html> 

</xsl:template> 

<xsl:template match="member"> 
    <xsl:value-of select="first_name" />&#160;<xsl:value-of select="last_name" /> <br/> 
</xsl:template> 

</xsl:stylesheet> 
関連する問題