You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用XSLT 3.0实现数据随机排序而非按输入顺序输出?

XSLT 3.0实现JSON数组随机排序方案

针对你需要将同empid下、类别为Peer/Stakeholder或Direct Report且questionno=1的response随机排序后生成DRPSQ1字段JSON数组的需求,可通过以下方式修改XSLT代码:

关键实现逻辑

利用XSLT 3.0内置的random-number-generator()生成不重复的随机序列,以此为依据对目标节点集进行排序,再转换为JSON数组。

修改后的代码示例

假设你原有处理逻辑大致如下:

<xsl:template match="your-target-node">
  <DRPSQ1>
    <xsl:value-of select="json-to-xml(array {
      ../*[empid = current()/empid and (category='Peer/Stakeholder' or category='Direct Report') and questionno=1]/response
    })" method="text"/>
  </DRPSQ1>
</xsl:template>

替换为带随机排序的版本:

<xsl:template match="your-target-node">
  <DRPSQ1>
    <!-- 筛选符合条件的response节点 -->
    <xsl:variable name="valid-responses" select="../*[empid = current()/empid and (category='Peer/Stakeholder' or category='Direct Report') and questionno=1]/response"/>
    
    <!-- 生成随机排序后的节点集 -->
    <xsl:variable name="randomized-set" select="
      $valid-responses!map {
        'response': .,
        'sort-key': random-number-generator()?permute(1 to count($valid-responses))[position()]
      }!sort(., function($a, $b) { $a?sort-key lt $b?sort-key })?response
    "/>
    
    <!-- 转换为JSON数组输出 -->
    <xsl:value-of select="json-to-xml(array { $randomized-set })" method="text"/>
  </DRPSQ1>
</xsl:template>

代码解释

  1. 筛选节点:$valid-responses先定位所有符合条件的response元素
  2. 绑定随机排序键:通过random-number-generator()?permute()生成与节点数量匹配的不重复随机整数序列,每个response对应一个唯一的排序键
  3. 随机排序:使用sort()方法根据排序键对节点重新排列,提取排序后的response值
  4. 生成JSON数组:将排序后的节点集转为JSON数组格式输出

每次运行代码时,DRPSQ1字段的数组元素都会呈现随机排列,不再遵循原XML中的输入顺序。

内容的提问来源于stack exchange,提问作者Buddi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 14:25:03