【发布时间】:2023-02-15 06:51:22
【问题描述】:
我有一个要求,其中我需要使用包含大写字母、小写字母和数字的 XSLT 生成一个 32 个字符的随机字符串值。
我现在正在使用下面的代码,但是,生成的值太相似了,不包括大写字母。
有没有其他方法可以实现这一目标?
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="node()">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="/">
<ABC>
<xsl:for-each select="ABC/ABC">
<DEF>
<externalCode><xsl:value-of select="concat(generate-id(),generate-id(),generate-id(),generate-id())"/></externalCode>
<userId><xsl:value-of select="userId"/></userId>
</DEF>
</xsl:for-each>
</ABC>
</xsl:template>
</xsl:stylesheet>
谢谢
【问题讨论】:
-
XSLT 1.0 中没有随机函数。您使用的是哪种处理器?您可以使用它支持的一些扩展。否则,您将需要在调用转换时至少提供一个种子(随机值或当前时间戳)作为参数。
-
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs"的使用对于 XSLT 1.0 来说有点不寻常。您确定您没有使用 XSLT 3 处理器,如 Saxon 10 或更高版本或 Altova 2017 R2 及更高版本,您可以在其中使用random-number-generator()及其permute功能? -
对于 XSLT 问题,请使用特定的 XSLT 版本标记问题,因为答案通常与版本相关。