我最近在研究xsl。我编写了代码来按<valueSet><key>
元素的值的升序排序key
。
下面是我想根据键排序的xml。我希望所有出现的valueSet
按第二个<key>
的值排序,然后按第一个key
的值排序。以下是xml:
<?xml version="1.0" encoding="UTF-8"?>
<!--Sample XML file generated by XMLSpy v2011 sp1 (http://www.altova.com)-->
<?xml-stylesheet type="text/xsl" href="lookupResources.xsl"?>
<LOOKUP_RESOURCES xsi:noNamespaceSchemaLocation="lookupResources.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<lookup_defs>
<lookup_def>
<name>ShowoutAccounts</name>
<table>
<valueSet>
<key>03</key>
<key>02</key>
<result>0321</result>
<result>0322</result>
<result>0323</result>
<result>0324</result>
<result>0325</result>
<result>0326</result>
<displayText>Enter your Operator Id in field 7 of the adjustment item.</displayText>
</valueSet>
<valueSet>
<key>01</key>
<key>02</key>
<result>0121</result>
<result>0122</result>
<result>0123</result>
<result>0124</result>
<result>0125</result>
<result>0126</result>
<displayText>Enter your Operator Id in field 7 of the adjustment item.</displayText>
</valueSet>
<valueSet>
<key>01</key>
<key>01</key>
<result>0111</result>
<result>0112</result>
<result>0113</result>
<result>0114</result>
<result>0115</result>
<result>0116</result>
<result>0117</result>
<displayText>Enter your Operator Id in field 7 of the adjustment item.</displayText>
</valueSet>
<valueSet>
<key>02</key>
<key>01</key>
<result>0211</result>
<result>0212</result>
<result>0213</result>
<result>0214</result>
<result>0215</result>
<result>0216</result>
<displayText>Enter your Operator Id in field 7 of the adjustment item.</displayText>
</valueSet>
<valueSet>
<key>03</key>
<key>01</key>
<result>0311</result>
<result>0312</result>
<result>0313</result>
<result>0314</result>
<result>0315</result>
<result>0316</result>
<displayText>Enter your Operator Id in field 7 of the adjustment item.</displayText>
</valueSet>
<valueSet>
<key>02</key>
<key>02</key>
<result>0221</result>
<result>0222</result>
<result>0223</result>
<result>0224</result>
<result>0225</result>
<result>0226</result>
<displayText>Enter your Operator Id in field 7 of the adjustment item.</displayText>
</valueSet>
</table>
</lookup_def>
<lookup_def>
<name>ExcludedRTs</name>
<file>
<inputFilePath>\\BapServer\PARAMETERS\apptype\lookupFiles</inputFilePath>
<inputFileName>excludedRTs</inputFileName>
<type>CSV</type>
</file>
<leadingCharsToIgnore>0</leadingCharsToIgnore>
</lookup_def>
</lookup_defs>
</LOOKUP_RESOURCES>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />
<xsl:param name="sortBy" select="'key'\value"/>
<xsl:param name="strXPath" select="//valueSet"/>
<xsl:template match="valueSet">
<xsl:copy>
<xsl:for-each select="$strXPath">
<xsl:sort select="*[name()=$sortBy]" order="ascending"/>
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<!--Sample XML file generated by XMLSpy v2011 sp1 (http://www.altova.com)-->
<?xml-stylesheet type="text/xsl" href="lookupResources.xsl"?>
<LOOKUP_RESOURCES xsi:noNamespaceSchemaLocation="lookupResources.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<lookup_defs>
<lookup_def>
<name>ShowoutAccounts</name>
<table>
<valueSet>
<key>01</key>
<key>01</key>
<result>0111</result>
<result>0112</result>
<result>0113</result>
<result>0114</result>
<result>0115</result>
<result>0116</result>
<result>0117</result>
<displayText>Enter your Operator Id in field 7 of the adjustment item.</displayText>
</valueSet>
<valueSet>
<key>01</key>
<key>02</key>
<result>0121</result>
<result>0122</result>
<result>0123</result>
<result>0124</result>
<result>0125</result>
<result>0126</result>
<displayText>Enter your Operator Id in field 7 of the adjustment item.</displayText>
</valueSet>
<valueSet>
<key>02</key>
<key>01</key>
<result>0211</result>
<result>0212</result>
<result>0213</result>
<result>0214</result>
<result>0215</result>
<result>0216</result>
<displayText>Enter your Operator Id in field 7 of the adjustment item.</displayText>
</valueSet>
<valueSet>
<key>02</key>
<key>02</key>
<result>0221</result>
<result>0222</result>
<result>0223</result>
<result>0224</result>
<result>0225</result>
<result>0226</result>
<displayText>Enter your Operator Id in field 7 of the adjustment item.</displayText>
</valueSet>
<valueSet>
<key>03</key>
<key>01</key>
<result>0311</result>
<result>0312</result>
<result>0313</result>
<result>0314</result>
<result>0315</result>
<result>0316</result>
<displayText>Enter your Operator Id in field 7 of the adjustment item.</displayText>
</valueSet>
<valueSet>
<key>03</key>
<key>02</key>
<result>0321</result>
<result>0322</result>
<result>0323</result>
<result>0324</result>
<result>0325</result>
<result>0326</result>
<displayText>Enter your Operator Id in field 7 of the adjustment item.</displayText>
</valueSet>
</table>
</lookup_def>
<lookup_def>
<name>ExcludedRTs</name>
<file>
<inputFilePath>\\BapServer\PARAMETERS\apptype\lookupFiles</inputFilePath>
<inputFileName>excludedRTs</inputFileName>
<type>CSV</type>
</file>
<leadingCharsToIgnore>0</leadingCharsToIgnore>
</lookup_def>
</lookup_defs>
</LOOKUP_RESOURCES>
答案 0 :(得分:2)
如何以简单的方式做到这一点?
XSLT 1.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"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="table">
<xsl:copy>
<xsl:apply-templates select="valueSet">
<xsl:sort select="key[1]" data-type="text" order="ascending"/>
<xsl:sort select="key[2]" data-type="text" order="ascending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>