如何仅对XML父节点内指定子节点排序并保留其他节点位置?
需求:仅排序下的节点,保留其他子节点原有位置
输入XML
<?xml version="1.0" encoding="UTF-8"?> <Companies> <badCompany>badCompany</badCompany> <badCompany>badCompany2</badCompany> <company>Toyota</company> <company>Mercedes</company> <company>BMW</company> <company>Mazda</company> <badCompany>badCompany3</badCompany> </Companies>
期望输出XML
<?xml version="1.0" encoding="UTF-8"?> <Companies> <badCompany>badCompany</badCompany> <badCompany>badCompany2</badCompany> <company>BMW</company> <company>Mazda</company> <company>Mercedes</company> <company>Toyota</company> <badCompany>badCompany3</badCompany> </Companies>
当前问题代码
现有XSLT会对
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns1="http://sap.com/xi/SAPGlobal20/Global" xmlns:n1="http://sap.com/xi/EWM/Global" version="2.0"> <xsl:output encoding="UTF-8" method="xml" version="1.0"/> <xsl:template match="Companies"> <xsl:copy> <xsl:apply-templates> <xsl:sort/> </xsl:apply-templates> </xsl:copy> </xsl:template> <xsl:template match="node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
修正后的XSLT代码
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns1="http://sap.com/xi/SAPGlobal20/Global" xmlns:n1="http://sap.com/xi/EWM/Global" version="2.0"> <xsl:output encoding="UTF-8" method="xml" version="1.0" indent="yes"/> <xsl:template match="Companies"> <xsl:copy> <!-- 先按原顺序输出所有非company的子节点 --> <xsl:apply-templates select="*[not(self::company)]"/> <!-- 提取所有company节点并排序后输出 --> <xsl:apply-templates select="company"> <xsl:sort/> </xsl:apply-templates> </xsl:copy> </xsl:template> <!-- 默认复制模板:保留所有节点、属性和文本的原样结构 --> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
代码说明
- 针对
节点分两步处理子节点: - 用
*[not(self::company)]筛选出所有非的子节点,按原有顺序直接输出 - 单独提取
节点,通过 <xsl:sort/>按文本内容排序后输出
- 用
- 保留默认的节点/属性复制模板,确保XML的其他结构(如命名空间、文本内容)不受影响
- 添加
indent="yes"让输出XML格式更规整,与期望输出对齐
内容的提问来源于stack exchange,提问作者dziq45
相关产品推荐
相关产品推荐

