sorting - XSLT 中的排序/重新排列
问题描述
我有一个 XML 文件(连同标题)有多个 CC 节点,每个 CC 节点有多个子节点,如下所示:
<File>
<Header/>
<CC>
<Div>
<SubDiv>
<Com>
<Reg>
<CCOrder>
</CC>
<CC>
<Div>
<SubDiv>
<Com>
<Reg>
<CCOrder>
</CC>
<CC>
<Div>
<SubDiv>
<Com>
<Reg>
<CCOrder>
</CC>
<File>
我想重新排列/排序 XSLT,使格式看起来像这样(CC 节点中的每个子节点按升序组合在一起):
<File>
<Header/>
<CCDiv>
<Div1>
<Div2>
<Div3>
</CCDiV>
<CCSubDiv>
<SubDiv1>
<SubDiv2>
<SubDiv3>
</CCSubDiv>
<CCCom>
<Com1>
<Com2>
<Com3>
<File>
Reg 和 CCOrder 节点以此类推。
有人可以帮忙吗?
解决方案
假设您可以使用 XSLT 2 或 3 for-each-group select="CC/*" group-by="node-name(.)"
:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="3.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="File">
<xsl:copy>
<xsl:for-each-group select="CC/*" group-by="node-name(.)">
<xsl:element name="{local-name(..)}{current-grouping-key()}">
<xsl:apply-templates select="current-group()"/>
</xsl:element>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
<xsl:template match="CC/*">
<xsl:element name="{name()}{position()}"></xsl:element>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- html - 签入的输入不适用于 html+php
- google-apps-script - 如何查找元素并获取行或列
- javascript - 如何通过在Javascript中拥有两个普通数组来创建具有相同键的关联数组
- azure - 如何使用 Power BI 数据流中的实体自动更新 SQL 数据库表?
- c# - 显示建议的部分文件中的格雷码
- c# - .NET Core 单元测试 Razor 页面 RedirectToPage()
- ag-grid-angular - 将网格高度设置为 100% 时不渲染 Ag 网格角度
- ios - 将 iOS 联系人提取到 tableview,但直到我单击另一个选项卡栏项目并返回 tableview 选项卡后,Tableview 数据才显示
- python - 无法在方法之外修改变量
- java - Spring Boot 错误:无法从进程 90196 刷新实时数据