根据字段值对记录进行排序



对于下面基于Type字段的XML输入,我们正在进行排序,它与下面的XSLT代码一起正常工作。。但是在输出XML中缺少报头信息。

XML输入

<?xml version="1.0" encoding="UTF-8" ?>
<root>
<ID>134</ID>
<Allocation>9</Allocation>
<Year>2021</Year>
<Access>
<Code>12</Code>
<PCode>13</PCode>
<Type>IO</Type>
</Access>
<Access>

<Code>15</Code>
<PCode>16</PCode>
<Type>IO</Type>
</Access>
<Access>
<Code>19</Code>
<PCode>20</PCode>
<Type>MC</Type>
</Access>
<Access>
<Code>22</Code>
<PCode>25</PCode>
<Type>MC</Type>
</Access>
<Access>
<Code>30</Code>
<PCode>31</PCode>
<Type>IO</Type>
</Access>
<Access>
<Code>35</Code>
<PCode>36</PCode>
<Type>IO</Type>
</Access>
</root>

XSLT代码

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="root">
<xsl:copy>
<xsl:apply-templates select="Access">

<xsl:sort select="Type" datatype="number"/>
</xsl:apply-templates>

</xsl:copy>
</xsl:template>
</xsl:stylesheet>

输出XML

<?xml version="1.0"?>
<root>
<Access>
<Code>12</Code>
<PCode>13</PCode>
<Type>IO</Type>
</Access>
<Access>

<Code>15</Code>
<PCode>16</PCode>
<Type>IO</Type>
</Access>
<Access>
<Code>30</Code>
<PCode>31</PCode>
<Type>IO</Type>
</Access>
<Access>
<Code>35</Code>
<PCode>36</PCode>
<Type>IO</Type>
</Access>
<Access>
<Code>19</Code>
<PCode>20</PCode>
<Type>MC</Type>
</Access>
<Access>
<Code>22</Code>
<PCode>25</PCode>
<Type>MC</Type>
</Access>
</root>

在上述输出中,缺少xml头字段(ID、Allocation、Year(。请帮我一下。

怎么样:

<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:strip-space elements="*"/>
<xsl:template match="/root">
<xsl:copy>
<xsl:copy-of select="ID | Allocation | Year"/>
<xsl:for-each select="Access">
<xsl:sort select="Type"/>
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

如果你不想明确列出所有其他元素,你可以更改:

<xsl:copy-of select="ID | Allocation | Year"/>

至:

<xsl:copy-of select="*[not(self::Access)]"/>

或(在XSLT2.0中(到:

<xsl:copy-of select="* except Access"/>

注意您的指令:

<xsl:sort select="Type" datatype="number"/>

因为CCD_ 1的值不是数字。

相关内容

  • 没有找到相关文章

最新更新