对于下面基于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的值不是数字。