xslt-1.0 - 对嵌套 XML 中的特定节点进行排序
问题描述
我正在尝试对嵌套 XML 中的特定节点进行排序。我可以很好地对它们进行排序,但输出不包含应该复制的其他 XML 字段。
输入:
<!-- language: lang-xml -->
<PerPerson>
<PerPerson>
<personalInfoNav>
<PerPersonal>
<lastName></lastName>
<firstName></firstName>
<personIdExternal></personIdExternal>
<startDate></startDate>
</PerPersonal>
</personalInfoNav>
<personIdExternal></personIdExternal>
<employmentNav>
<EmpEmployment>
<personIdExternal></personIdExternal>
<assignmentClass></assignmentClass>
<compInfoNav/>
<jobInfoNav>
<EmpJob>
<employeeClass></employeeClass>
<seqNumber>2</seqNumber>
<startDate>2020-06-01T00:00:00.000</startDate>
</EmpJob>
<EmpJob>
<employeeClass></employeeClass>
<seqNumber>3</seqNumber>
<startDate>2020-01-01T00:00:00.000</startDate>
</EmpJob>
<EmpJob>
<seqNumber>1</seqNumber>
<startDate>2019-06-01T00:00:00.000</startDate>
</EmpJob>
</jobInfoNav>
<userId></userId>
</EmpEmployment>
</employmentNav>
</PerPerson>
</PerPerson>
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="PerPerson/PerPerson">
<xsl:apply-templates select="employmentNav/EmpEmployment/jobInfoNav/EmpJob">
<xsl:sort select="startDate" order="descending"/>
<xsl:sort select="seqNumber" order="descending"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
如何确保复制其他所有内容?
解决方案
我想你想做:
<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"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="jobInfoNav">
<xsl:apply-templates select="EmpJob">
<xsl:sort select="startDate" order="descending"/>
<xsl:sort select="seqNumber" order="descending"/>
</xsl:apply-templates>
</xsl:template>
</xsl:stylesheet>
解释见:https ://www.w3.org/TR/1999/REC-xslt-19991116/#section-Processing-Model
推荐阅读
- java - HSM:使用 JAVA 应用程序使用 HSM 引入
- apache-kafka - 卡夫卡 INVALID_FETCH_SESSION_EPOCH
- angular - 内部属性数据绑定问题
- pywinauto - 我可以使用 pywinauto 在 Windows 开始菜单上自动执行操作吗?
- apache-spark - Databricks Spark CREATE TABLE 永远需要 100 万个小 XML 文件
- excel - VBA - 选择特定列
- java - Java Play 框架 - NoClassDefFoundError:播放/配置
- git - git 如何在 active active 场景中处理两次推送?
- serverless-framework - 如何解决 AWS Lambda 函数的原生 gem 依赖项?
- java - 如何在 AWS Java SDK 中自动扩展之前检查正在进行的自动扩展活动