【问题标题】:Generate a 32 character random string using XSLT使用 XSLT 生成 32 个字符的随机字符串
【发布时间】: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 版本标记问题,因为答案通常与版本相关。

标签: xml xslt random generate


【解决方案1】:

一种可能是在 XSLT 处理之外生成 32 个字符的随机字符串,并将生成的值作为 --stringparam 传递给 XSLT 转换。

这是一个 python3 实现,用于生成包含大写、小写和数字的随机 32 个字符串:

python3 -c "import string,random; print(''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase + string.digits, k=32)))"

示例输出:4Ve3o1oURX3oVzn5954SnVLlqviWp9uN


使用上述实现作为 XSLT 转换的一部分:

xsltproc --stringparam random $(python3 -c "import string,random; print(''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase + string.digits, k=32)))") p.xslt p.xml

XSLT 输出:

<externalCode>m4lrO26bujNjS1FopZ7jv31Di1zK7xdP</externalCode>

p.xslt 的内容:

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

  <xsl:output method="xml" omit-xml-declaration="yes"/>

  <xsl:template match="/">
      <externalCode>
      <xsl:value-of select="$random"/>
      </externalCode>
  </xsl:template>

</xsl:stylesheet>

p.xml 的内容:

<data>
  dummy_xml
</data>

【讨论】:

    猜你喜欢
    • 2011-07-23
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2017-08-01
    • 2011-06-30
    相关资源
    最近更新 更多