随机化节点顺序 xslt

2024-05-02

我有一个包含如下节点的 XML 文件:

<values>
     <item>item 1</item>
     <item>item 2</item>
     <item>item 3</item>
     <item>item 4</item>
     <item>item 5</item>
</values>

我想使用 xslt 以随机顺序获取列表:

<values>
     <item>item 3</item>
     <item>item 5</item>
     <item>item 1</item>
     <item>item 4</item>
     <item>item 2</item>
</values>

我无法使用外部资源,例如 “xmlns:java =“java.lang.Math” 和 “xmlns:math =”http://exslt.org/math“

因为限制。

也许这个链接可能有帮助:

http://fxsl.sourceforge.net/articles/Random/Casting%20the%20Dice%20with%20FXSL-htm.htm http://fxsl.sourceforge.net/articles/Random/Casting%20the%20Dice%20with%20FXSL-htm.htm


以下样式表将把项目写入输出树以随机顺序。样式表期望在运行时提供外部“初始种子”编号作为参数。

注意:由于项目只是重新排序而不进行处理,因此不需要对它们进行排序,而且这里也不需要 EXSLT node-set() 函数。

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>

<xsl:param name="initial-seed" select="123"/>

<xsl:template match="/">
    <values>
            <xsl:call-template name="pick-random-item">
                <xsl:with-param name="items" select="values/item"/>
            </xsl:call-template>
    </values>
</xsl:template>

<xsl:template name="pick-random-item">
    <xsl:param name="items" />
    <xsl:param name="seed" select="$initial-seed"/>
    <xsl:if test="$items">
        <!-- generate a random number using the "linear congruential generator" algorithm -->
        <xsl:variable name="a" select="1664525"/>
        <xsl:variable name="c" select="1013904223"/>
        <xsl:variable name="m" select="4294967296"/>
        <xsl:variable name="random" select="($a * $seed + $c) mod $m"/>
        <!-- scale random to integer 1..n -->
        <xsl:variable name="i" select="floor($random div $m * count($items)) + 1"/>
        <!-- write out the corresponding item -->
        <xsl:copy-of select="$items[$i]"/>
        <!-- recursive call with the remaining items -->
        <xsl:call-template name="pick-random-item">
            <xsl:with-param name="items" select="$items[position()!=$i]"/>
            <xsl:with-param name="seed" select="$random"/>
        </xsl:call-template>
    </xsl:if>
</xsl:template>

</xsl:stylesheet>

将默认初始种子 (123) 应用于您的输入,输出为:

<?xml version="1.0" encoding="utf-8"?>
<values>
   <item>item 2</item>
   <item>item 3</item>
   <item>item 1</item>
   <item>item 4</item>
   <item>item 5</item>
</values>

当使用种子 1234 执行时,输出为:

<?xml version="1.0" encoding="utf-8"?>
<values>
   <item>item 4</item>
   <item>item 1</item>
   <item>item 5</item>
   <item>item 2</item>
   <item>item 3</item>
</values>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

随机化节点顺序 xslt 的相关文章

  • 使用 MemoryStream 创建 Open XML 电子表格时的 Excel 和“不可读内容”

    使用 Open XML SDK v2 0 创建 Excel 电子表格时 我们的 Excel 输出最初可以成功运行几个月 最近Excel 所有版本 开始抱怨 Excel在 zot xlsx 中发现不可读的内容 是否要恢复此工作簿的内容 我们正
  • 如何将数据库查询的行转换为 XML 文件?

    我正在开发一个 Delphi 应用程序 该应用程序需要从一段工作中获取行并将其转换为单个 XML 文件 以便上传到第三方 Web 服务 有没有可用的组件或库可以做到这一点 如果不是 那么构建 DB2XML 转换器的最佳代码方法是什么 我注意
  • 以 UTF8 而不是 UTF16 输出 DataTable XML

    我有一个 DataTable 我正在使用 WriteXML 创建一个 XML 文件 尽管我在以 UTF 16 编码导出它时遇到问题 并且似乎没有明显的方法来更改它 我了解 NET 在字符串内部使用 UTF 16 这是正确的吗 然后 我通过
  • 将 XML 映射到 C# 中的类

    我希望使用 XmlSerializer 对象将嵌套元素中的多个 XML 属性映射到单个 POCO 类中 XML
  • 在常数空间中创建 1..N 的随机排列

    我正在寻找枚举固定空间中数字 1 N 的随机排列 这意味着我无法将所有数字存储在列表中 原因是 N 可能非常大 超过可用内存 我仍然希望能够一次遍历这样一个数字的排列 只访问每个数字一次 我知道对于某些 N 可以这样做 许多随机数生成器随机
  • 解组转义 XML

    在 Go 中 我将如何解码此 XML 响应 我尝试过建立一个自定义UnMarshal方法在我的Answerstruct 但我运气不太好
  • xsi:type 属性搞乱了 C# XML 反序列化

    我使用 XSD exe 根据 XML 架构 xsd 文件 自动生成 C 对象 我正在反序列化 OpenCover 输出 但其中一个部分类未正确生成 这是导致异常的行
  • 通过 XML 将重复事件添加到 Google 日历

    我正在尝试通过协议 API 将重复事件添加到我的日历中 我从在 Google 界面中创建的事件中获取了重复标记的语法 并将其用于我的创建请求中 这是我提交的内容
  • XML 创建 - 错误:带有替代方案的重载方法构造函数 UnprefixedAttribute

    scala gt val count 7 count Int 7 将其放入 XML 属性中会出现错误 scala gt val x
  • 检查 XML 元素是否存在

    如何验证 XML 文件中是否存在特定元素 假设我有一个不断变化的 XML 文件 我需要在读取 解析它之前验证每个元素是否存在 if doc SelectSingleNode mynode null 应该这样做 显然 其中 doc 是您的 X
  • JSPX 命名空间对于 EL 函数不可见?

    我正在尝试使用 JSPX JSP 的纯 XML 语法 并遇到看起来应该可以工作但实际上却不起作用的情况 我使用 jsp root 元素中的命名空间声明导入标签库 然后稍后将这些用于元素以及 EL 函数
  • MSMQ接收和删除

    是否有任何选项可以在读取消息后将其从 MSMQ 中删除 比如 接收 删除可以作为原子操作运行吗 听起来您想查看下一条消息 然后在处理完成后接收它 Message message Queue Peek Queue ReceiveById me
  • 单元测试报告的 XML 格式规范(DTD、XSD..)

    许多工具为单元测试报告生成和使用相同的 XML 文件格式 例子 source http junitpdfreport cvs sourceforge net junitpdfreport src resources examples tes
  • XML-RPC 和 SOAP 有什么区别?

    我从来没有真正理解为什么 Web 服务实施者会选择其中之一 XML RPC 通常出现在较旧的系统中吗 任何有助于理解这一点的帮助将不胜感激 差异 SOAP 更强大 并且更受软件工具供应商 MSFT NET Java 企业版等 的青睐 SOA
  • 删除Android所有语言中的字符串

    我有一个包含多个翻译的应用程序 我想删除一些字符串 我怎样才能重构并删除它们一次 例如在默认情况下strings xml文件并自动将删除传播到其他翻译的其他 strings xml 文件 您可以通过 Android Studio 中的 翻译
  • 使用 Jackson 使用不带注释的属性来序列化 xml

    我目前正在使用 Jackson 编写一些代码 将遗留 POJO 序列化为 XML 但我需要使用属性而不是子元素来序列化它们 有没有办法使用 Jackson 来做到这一点 而不需要向遗留类添加注释 有没有办法使用 Jackson 来做到这一点
  • 使用 dpi 与 dp 缩放图像之间的差异

    我拥有所有由九个补丁位图组成的 dpi 可绘制目录 xxhdpi 和 xxxhdpi 是否必要 可绘制目录中的可绘制资源文件可检索所有缩放的位图 并且我使用可绘制资源文件 现在 我的问题是我还根据大小 小 正常等 创建了 缩放 布局目录 其
  • 如何在另一个 XML 中使用 CDATA 中包装的 XML 进行 XSL 转换?

    XML 文档包含另一个 XML 元素 该元素包装在 CDATA 中 包装的 XML 如何用于 XSL 和 XSL FO 转换 版本 1 如果您愿意采取多个转型步骤 那么这是可能的 使用disable output escaping输出相关部
  • 在MySQL中生成随机字符串

    我正在尝试使用函数在 phpmyadmin 中获取随机字符串 我有以下代码 CREATE FUNCTION randomPassword RETURNS varchar 128 BEGIN SET chars ABCDEFGHIJKLMNO
  • XSL字符串多重替换功能

    如何让这个函数进行多重替换 经验 替换aaa with 111并替换bbb with 222 etc

随机推荐