我想知道,在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>
希望我的问题是清楚的?
Thanks in advance
我想知道,在XSLT 1.0中是否有任何方法可以进行随机排序?
使用vanilla XSLT 1.0 - No。
您可以使用扩展来访问外部语言的随机化器,并将该函数放入xsl:sort
。例如,使用msxsl
扩展访问Windows脚本语言:
<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>
您可以使用XSLT generate-id()
函数,该函数返回唯一标识文档中节点的字符串。按照规格:
实现可以自由生成任何方便的标识符假设它总是生成相同的标识符用于相同的节点和不同的标识符总是由不同节点生成。一个执行没有义务生成相同的标识符转换文档的时间。在那里是不是不能保证生成唯一标识符将是不同的属性中指定的任何唯一id源文档。
这取决于你的XSLT处理器