一种方法是使用函数 generate-id() 作为排序标准。假设您有以下输入:
<?xml version="1.0" encoding="ISO-8859-1"?>
<headlines>
<headline>
Limburg
</headline>
<headline>
Fukushima
</headline>
<headline>
Große Koalition
</headline>
<headline>
Flugzeugabsturz
</headline>
</headlines>
使用此 XSLT,您可以“随机化”输出:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="ISO-8859-1"/>
<xsl:template match="/headlines">
<headlines>
<xsl:for-each select="headline">
<xsl:sort select="generate-id(.)"/>
<headline id="{generate-id(.)}">
<xsl:copy-of select="./text()"/>
</headline>
</xsl:for-each>
</headlines>
</xsl:template>
</xsl:stylesheet>
结果是
<?xml version="1.0" encoding="ISO-8859-1"?>
<headlines><headline id="idm3928">
Limburg
</headline><headline id="idm5512">
Flugzeugabsturz
</headline><headline id="idm5704">
Große Koalition
</headline><headline id="idm5920">
Fukushima
</headline></headlines>
需要注意三点:
- 标题标签中属性“id”的输出不是必需的。这只是为了可视化排序标准。
- 排序顺序取决于使用的 xslt 处理器(在本例中为 Debian xsltproc)。
- 这并不是真正的“随机”。但是,处理器 xsltproc 实际上会在每次调用时选择新的 id,因此实际上标题会被“打乱”。:-)