xml - 需要执行嵌套数字排序 (xslt 1.0)
问题描述
下面的 XML 需要使用 XSLT 1.0 对每个 WorkingTemplate 的 queueId 进行排序
在这里问的原因:到目前为止看到的所有示例都没有这种结构。因此,我无法为此附加任何有效的 xslt。请帮忙。
<Export>
<WorkingTemplates>
<WorkingTemplate label="MM_DR">
<WorkingQueues>
<WorkingQueue queueId="132" right="READ_WRITE"/>
<WorkingQueue queueId="49" right="READ_WRITE"/>
<WorkingQueue queueId="197" right="NO_ACCESS"/>
</WorkingQueues>
</WorkingTemplate>
<WorkingTemplate label="FX_MA">
<WorkingQueues>
<WorkingQueue queueId="123" right="READ_WRITE"/>
<WorkingQueue queueId="60" right="READ_WRITE"/>
<WorkingQueue queueId="182" right="NO_ACCESS"/>
</WorkingQueues>
</WorkingTemplate>
</WorkingTemplates>
</Export> ```
[![Situation before sort][1]][1]
[![Situation after sort][2]][2]
[1]: https://i.stack.imgur.com/5ojwu.png
[2]: https://i.stack.imgur.com/fmyKf.png
解决方案
你可以试试这个用法for-each
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="1.0">
<xsl:output method="xml" omit-xml-declaration="no" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="WorkingQueues">
<xsl:copy>
<xsl:for-each select="WorkingQueue">
<xsl:sort select="@queueId" order="ascending" data-type="number"/>
<xsl:copy>
<xsl:copy-of select="@*"/>
</xsl:copy>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- django - 当我点击 /swagger url 时出现“AssertionError:找到重复的参数”
- r - 添加主题号
- android - Android 与 Linux Ubuntu 的串行通信
- windows - 系统找不到cmder中指定的文件
- zeebe - Zeebe 代理不启动
- node.js - NodeJS - 没有“Access-Control-Allow-Origin”标头
- javascript - 离屏幕最近的线系列求解不返回适当的值
- python - 从python中的函数返回多个输出
- linux - 无法合并 GParted 中未分配的空间
- python-2.7 - Python App Engine 应用程序未显示部署的最新代码