xslt 排序输出 xml

2023-12-12

我正在尝试找到以下问题的解决方案。

我正在开发 XSLT 转换(现在大约有 40KB 大),它将相当复杂的 XML 转换为一个非常简单的结构,如下所示:

<Records>
<Record key="XX">
</Record> 
<Record key="XX1">
</Record>
<Record key="XX2">
</Record>
<Record key="XX3">
</Record>
</Records>

我想让这个输出 XML 根据排序Records/Record/@key价值观。 问题是我的 XSLT 生成的输出未排序,并且由于其复杂性,我无法对其进行排序。 是否可以申请xsl:sort在输出 XML 上?我知道我可以准备另一个 XSLT 转换,但就我而言,这不是解决方案,因为我仅限于一个 XSLT.. 请帮忙!...


是否可以对输出 XML 应用 xsl:sort?

是的,多遍处理is可能的,特别是在 XSLT 2.0 中,您甚至不需要应用xxx:node-set()结果的扩展,因为臭名昭著的 RTF 类型不再存在:

<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
  <xsl:variable name="vPass1">
   <!--
        Put/Invoke your cirrent code here   
        to generate the following           
-->
    <Records>
      <Record key="XX3">
      </Record>
      <Record key="XX2">
      </Record>
      <Record key="XX4">
      </Record>
      <Record key="XX1">
      </Record>
    </Records>
  </xsl:variable>

  <xsl:apply-templates select="$vPass1/*"/>
 </xsl:template>

 <xsl:template match="Records">
  <Records>
   <xsl:perform-sort select="*">
    <xsl:sort select="@key"/>
   </xsl:perform-sort>
  </Records>
 </xsl:template>
</xsl:stylesheet>

当对任何 XML 文档(未使用/忽略)执行此转换时,会生成所需的正确排序结果:

<Records>
   <Record key="XX1"/>
   <Record key="XX2"/>
   <Record key="XX3"/>
   <Record key="XX4"/>
</Records>

在 XSLT 1.0 中,与将结果从 RTF 类型额外转换为普通树几乎相同:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:ext="http://exslt.org/common"
 exclude-result-prefixes="ext">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
  <xsl:variable name="vrtfPass1">
   <!--
        Put/Invoke your cirrent code here   
        to generate the following           
-->
    <Records>
      <Record key="XX3">
      </Record>
      <Record key="XX2">
      </Record>
      <Record key="XX4">
      </Record>
      <Record key="XX1">
      </Record>
    </Records>
  </xsl:variable>

  <xsl:variable name="vPass1"
                select="ext:node-set($vrtfPass1)"/>

  <xsl:apply-templates select="$vPass1/*"/>
 </xsl:template>

 <xsl:template match="Records">
  <Records>
   <xsl:for-each select="*">
    <xsl:sort select="@key"/>

    <xsl:copy-of select="."/>
   </xsl:for-each>
  </Records>
 </xsl:template>
</xsl:stylesheet>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

xslt 排序输出 xml 的相关文章

随机推荐

  • Pygame 绘图旋转 90 度

    因此 如果您有机会看到我之前的问题 您就会知道我正在与一位朋友一起重现康威的生命游戏 我遇到了另一个问题 绘图由于某种奇怪的原因而被旋转 我认为 x 和 y 位置有问题 但我似乎找不到解决方法 任何帮助表示赞赏 这是代码 Import go
  • 构造函数隐式删除

    下面列出了相关代码 您可以查看https godbolt org z 3GH8zD 我确实可以解决编译器编译错误 但我并不完全清楚其背后的原因 我将不胜感激对这个问题有一些帮助 struct A int x A int x 1 x x us
  • .obj 中已定义变量,但没有循环包含[重复]

    这个问题在这里已经有答案了 我知道 SO 上已经有很多类似的问题和解决方案 我读过它们 但没有一个能帮助我解决我的问题 我创建了一个用于记录的类 这是Logger h ifndef LOGGER H define LOGGER H name
  • java.io.NotSerializedException - org.omnifaces.taghandler.Converter

    我有一个在 Jboss 6 上使用 Primefaces 3 5 和 Omnifaces 1 5 的应用程序 使用 myfaces 2 1 5 尝试使用o converter我收到以下错误 org omnifaces taghandler
  • 使用数组求偶数和奇数平均值

    编写一个程序 从用户那里读取 10 个值的列表 将值放入数组中 程序应读取数组 然后计算并显示偶数输入值和奇数输入值的平均值 这应该使用对象 方法和测试器类来完成 我不明白为什么我收到错误 二元运算符的操作数类型错误 我不知道该改变什么 我
  • 使用 CloudFormation 模板部署 IIS 网站

    我有一个 Visual Studio C 部署包 zip 已将其推送到我的 S3 存储 我想运行我的 CloudFormation 脚本并让它创建 IIS 服务器的实例 我有用于此的脚本 然后将 Visual Studio 网站从 S3 存
  • 使用 cron 安排 R 脚本

    我正在尝试使用 cron 安排我的 R 脚本 但它不起作用 R 似乎在 cron 中找不到包 有人可以帮助我吗 谢谢 以下是我的 bash 脚本 source my profile home winie profile script R w
  • Java 8 链式方法参考?

    假设有一个典型的Java Bean class MyBean void setA String id void setB String id List
  • Javascript:sum(2)(3) //返回5是什么意思;

    这是返回其值的代码 function sum a return function b return a b sum 2 3 它返回 5 但如果我输入代码 function sum a function add b return a b re
  • 跟踪 Informix Client for Linux 的 ODBC 调用

    我尝试跟踪 Linux 上运行的程序中的 ODBC 函数调用 该程序动态链接 ODBC 管理器 然后连接到数据库并获取一些数据 我可以通过添加到 odbcinst ini 来使用 unixODBC 跟踪 ODBC 调用 ODBC Trace
  • 没有方法获取字节数组流[重复]

    这个问题在这里已经有答案了 我想获取字节数组流 但我发现Arrays没有获取字节数组流的方法 byte byteArr new byte 100 Arrays stream byteArr Compile time error 我的问题 为
  • tools.jar 丢失 - 但仅限于第一次调用(Tomcat 8/Java 8/ Axis)

    现在 我将 Web 应用程序升级到了 Java 8 在 Tomcat 8 中运行的 axis Web 服务遇到了奇怪的类加载问题 安装 Web 应用程序后第一次调用 Web 服务将导致 RuntimeException 和 在类路径中找不到
  • 关闭连接:java中的下一个

    我有 ResultSet 方法 我将在finally 块中关闭连接 public static ResultSet countdrcountcr String vforacid throws SQLException ResultSet r
  • 如何使用 Rocket 响应包含 JSON 数据的 POST 请求?

    我正在尝试使用创建后端火箭箱 fn main rocket ignite mount routes helloPost launch derive Debug PartialEq Eq RustcEncodable FromForm str
  • @Document 注释中的 MongoDB 和 SpEL 表达式

    我正在尝试使用 SpEL 根据我定义的一些规则将相同的文档加载到不同的集合中 首先从我所拥有的开始 首先是文件 Document collection mySpecialProvider getTargetCollectionName pu
  • 如何在 case 语句中循环遍历表中的值

    抱歉 SQL 新手 我有下表 用户可以更新和 或添加到 Project Type ID Name 1 Documents 2 DVD 3 Poster 我有一个查询 部分需要循环遍历每个记录并创建一个 数据透视 sum case when
  • 从 Qt 中的多线程绘图

    我正在用 Qt 编写一个程序 它运行 10 个工作线程来计算空间中物体的轨迹 他们还必须绘制物体的路径 我有一个派生 QGraphicsEllipseItem 的 Body 类 其中有一个 QPainterPath 模拟 类获取世界上的障碍
  • 网络应用程序共享相同的内存存储[重复]

    这个问题在这里已经有答案了 我在一个用于计算用户详细信息的应用程序中工作 但不知何故 一个用户的价值观会改变另一个用户的价值观 下面是代码片段 def Compute UserScore self details ques no try i
  • 如何在Azure Pipeline中将XCODE版本更新到13.4.1?

    我正在使用 azure pipeline 部署应用程序 出现以下错误 module compiled with Swift 5 6 1 cannot be imported by the Swift 5 5 我尝试过更改配置 但没有成功 任
  • xslt 排序输出 xml

    我正在尝试找到以下问题的解决方案 我正在开发 XSLT 转换 现在大约有 40KB 大 它将相当复杂的 XML 转换为一个非常简单的结构 如下所示