我正在尝试对嵌套 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>
我如何确保其他所有内容都被复制?
答案 0 :(得分:0)
我认为你想做:
<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