xml - 如何在保持结构的同时使用 xslt 重新排序 xml 文件
问题描述
我知道这是一个基本问题,但我对 XSL 很陌生,我无法让它工作。我有一个具有给定结构的 XML 文件,我想在保持结构的同时基于一个节点按字母顺序重新排列 XML。在 Adobe InDesign 中导入 XML 时,我需要该 XSLT 样式表来重新排序 XML。
我的档案:
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Employee>
<First_Name>Andrew</First_Name>
<Last_Name>Miller</Last_Name>
<Salary>100000</Salary>
<Performance>8</Performance>
</Employee>
<Employee>
<First_Name>Betsy</First_Name>
<Last_Name>Clarke</Last_Name>
<Salary>105000</Salary>
<Performance>10</Performance>
</Employee>
<Employee>
<First_Name>Donald</First_Name>
<Last_Name>Abernathey</Last_Name>
<Salary>95000</Salary>
<Performance>7</Performance>
</Employee>
</Root>
我想重新排列文档,使其根据标签按字母顺序排序<Last_name>
。我想要的输出是:
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Employee>
<First_Name>Donald</First_Name>
<Last_Name>Abernathey</Last_Name>
<Salary>95000</Salary>
<Performance>7</Performance>
</Employee>
<Employee>
<First_Name>Betsy</First_Name>
<Last_Name>Clarke</Last_Name>
<Salary>105000</Salary>
<Performance>10</Performance>
</Employee>
<Employee>
<First_Name>Andrew</First_Name>
<Last_Name>Miller</Last_Name>
<Salary>100000</Salary>
<Performance>8</Performance>
</Employee>
</Root>
我找到了一些解决方案来重新排列我的输出,但它始终是关于输出 HTML 而不是 XML。
更新:按照这里的要求,我试图解决这个问题。我卡住了,因为它现在将所有内容都复制到一个标签<Employee>
中。
<?xml version="1.0" encoding="UTF-8"?>
<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"/>
<xsl:template match="/">
<Root>
<Employee>
<xsl:for-each select="Root/Employee">
<xsl:sort select="Last_Name"/>
<First_Name><xsl:value-of select="First_Name"/></First_Name>
<Last_Name><xsl:value-of select="Last_Name"/></Last_Name>
<Salary><xsl:value-of select="Salary"/></Salary>
<Performance><xsl:value-of select="Performance"/></Performance>
</xsl:for-each>
</Employee>
</Root>
</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"/>
<xsl:template match="/Root">
<xsl:copy>
<xsl:for-each select="Employee">
<xsl:sort select="Last_Name"/>
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- android - 如何更改kotlin中按钮的背景颜色
- c - (type *)var 和 (type *)&var 的区别
- c# - 如何将 SQLite 数据库“连接”到 gridview?
- python - Python 使用 Jar 文件
- java - 如何获取给定列表中的联系人
- swift - Swift 方法链,如何重用类和方法?
- javascript - 如何通过 javascript 获取可用的 RAM 内存
- amazon-web-services - 如何知道有多少用户使用 aws cognito 登录
- at-command - 如何在两个 ESP8266 WiFi 模块之间发送数据
- asp.net-core-mvc - 在 ASP.NET CORE 3.1 MVC 中实现“记住我”