2011-07-07 16 views
0

XSLT 1.0でランダムソートを行う方法はありますか?ここでxslt 1.0のソートをランダム化しますか?

は私のXMLである

<root><DO status="a">text comes here</DO><DO status="b">text comes here</DO><DO status="c">text comes here</DO><DO status="d">text comes here</DO><DO status="e">text comes here</DO></root> 

所望の出力:

<root><DO status="c">text</DO><DO status="a">text comes here</DO><DO status="b">text comes here</DO><DO status="e">text comes here</DO><DO status="d">text comes here</DO></root> 

私の質問が明確であるホープ?私が知りたいのですが、事前

答えて

1

おかげで、XSLT 1.0でのランダムな並べ替えを行うにはどのような方法があるのですか?あなたは、外部言語のランダマイザーにアクセスし、xsl:sortにその機能を入れて拡張子を使用することができ番

- バニラXSLT 1.0で

。たとえば、Windowsのスクリプト言語にアクセスするためにmsxsl拡張機能を使用して:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    xmlns:my="http://tempuri.org/myscripts" 
    exclude-result-prefixes="msxsl my" 
> 

    <msxsl:script language="JScript" implements-prefix="my"> 
    function random() { 
     return Math.random(); 
    } 
    </msxsl:script> 

    <xsl:template match="root"> 
    <xsl:for-each select="DO"> 
     <xsl:sort select="my:random()" data-type="number" /> 
     <xsl:copy-of select="." /> 
    </xsl:for-each> 
    </xsl:template> 

</xsl:stylesheet> 
0

あなたが一意に文書内のノードを識別する文字列を返しますXSLT generate-id() functionを使用することができます。仕様に従って:

実装は、任意の便利な方法 における識別子は、それが常に異なる識別子が常に異なるノードから生成 あること 同じ同じノードの識別子と を生成することを提供 を生成するために自由です。 実装では、 という同じ識別子を生成する義務はありません。それぞれ文書が変換されるまでの時間です。 は、生成された の一意の識別子が、 ソース文書で指定された一意のIDから別個の になることを保証するものではありません。

したがって、XSLTプロセッサによって異なります。

関連する問題