我正在尝试编写XSLT1.0来根据字段对子段进行排序,我无法对其进行排序,有人可以帮忙吗? 附加输入和输出文件请建议
会有多个段,我们需要根据字段排序,而不删除像,
这样的子段输入样本
<?xml version="1.0" encoding="UTF-8"?>
<HEADER>
<CODI BEGIN="1">
<DC40 SEGMENT="1">
<TABNAM>DC40</TABNAM>
</DC40>
<BODY SEGMENT="1">
<BLDAT>20240503</BLDAT>
<CHILD SEGMENT="1">
<RNTAM>68850363</RNTAM>
<KEY>900030</KEY>
<ITEM SEGMENT="1">
<NAE11>0000000000000</NAE11>
</ITEM>
</CHILD>
<CHILD SEGMENT="1">
<RNTAM>68850363</RNTAM>
<KEY>900020</KEY>
<ITEM SEGMENT="1">
<NAE11>0000000001000</NAE11>
</ITEM>
</CHILD>
<CHILD SEGMENT="1">
<RNTAM>68850792</RNTAM>
<KEY>900010</KEY>
<ITEM SEGMENT="1">
<NAE11>0000010000000</NAE11>
</ITEM>
<ITEM SEGMENT="1">
<NAE11>0000000030000</NAE11>
</ITEM>
</CHILD>
</BODY>
</CODI>
</HEADER>
输出样本
<?xml version="1.0" encoding="UTF-8"?>
<HEADER>
<CODI BEGIN="1">
<DC40 SEGMENT="1">
<TABNAM>DC40</TABNAM>
</DC40>
<BODY SEGMENT="1">
<BLDAT>20240503</BLDAT>
<CHILD SEGMENT="1">
<RNTAM>68850792</RNTAM>
<KEY>900010</KEY>
<ITEM SEGMENT="1">
<NAE11>0000010000000</NAE11>
</ITEM>
<ITEM SEGMENT="1">
<NAE11>0000000030000</NAE11>
</ITEM>
</CHILD>
<CHILD SEGMENT="1">
<RNTAM>68850363</RNTAM>
<KEY>900020</KEY>
<ITEM SEGMENT="1">
<NAE11>0000000001000</NAE11>
</ITEM>
</CHILD>
<CHILD SEGMENT="1">
<RNTAM>68850363</RNTAM>
<KEY>900030</KEY>
<ITEM SEGMENT="1">
<NAE11>0000000000000</NAE11>
</ITEM>
</CHILD>
</BODY>
</CODI>
</HEADER>
我尝试了下面的代码,请您帮忙。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="HEADER">
<xsl:copy>
<xsl:apply-templates select="HEADER/CODI/BODY/CHILD"/>
<xsl:sort select="CHILD()"/>
<xsl:copy-of select="."/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我想你想要:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="BODY">
<xsl:copy>
<xsl:apply-templates select="@* | BLDAT"/>
<xsl:apply-templates select="CHILD">
<xsl:sort select="KEY"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>