我是 xslt 的新手并面临一个问题。我必须使用 xslt 根据预定义的顺序对 xml 文件中的元素重新排序。通过使用 xsl:copy-of 或 xsl:apply-template 并重新排序元素,我成功地做到了这一点。但是,如果源 xml 有一些 xslt 应用模板中不存在的新元素,那么这些新元素根本不会被复制。就像在下面的示例中一样,元素“状态”在输出中丢失。
例如。原始xml
<Company>
<Employee id="100" Name="John" >
<Salary value="15000"/>
<Qualification text="Engineering">
<State name="Kerala" code="02">
<Background text="Indian">
</Employee>
</Company>
XSLT 按 Qualification 、 Salary 和 Background 的顺序重新排序元素
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output indent="yes" omit-xml-declaration="yes" method="xml" />
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Employee">
<xsl:copy>
<xsl:apply-templates select="Qualification"/>
<xsl:apply-templates select="Salary" />
<xsl:apply-templates select="Background"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
获得的输出
<?xml version="1.0" encoding="utf-8"?>
<Company>
<Employee>
<Qualification text="Engineering" />
<Salary value="15000" />
<Background text="Indian" />
</Employee>
</Company>
需要输出
<?xml version="1.0" encoding="utf-8"?>
<Company>
<Employee>
<Qualification text="Engineering" />
<Salary value="15000" />
<Background text="Indian" />
<State name="Kerala" code="02"/>
</Employee>
</Company>
请告诉我 xslt 如何在现有标签的重新排序完成后自动复制任何剩余的新标签。