XSL与分拣错误
问题描述:
这里的XML是我的XML数据源:XSL与分拣错误
<?xml version="1.0" ?>
<data>
<quarter qt="3">
<PostCode>
<Code abbr="2000"></Code>
<Learner>1,116</Learner>
<P1>99993</P1>
<P2>402</P2>
<Unrestricted>10,137</Unrestricted>
<ClassC>11564</ClassC>
<ClassLR>69</ClassLR>
<ClassMR>74</ClassMR>
<ClassHR>108</ClassHR>
<ClassHC>43</ClassHC>
<ClassMC>4</ClassMC>
<ClassR>976</ClassR>
</PostCode>
<PostCode>
<Code abbr="2000"></Code>
<Learner>3</Learner>
<P1>11</P1>
<P2>3000000000000</P2>
<Unrestricted>14</Unrestricted>
<ClassC>20</ClassC>
<ClassLR>0</ClassLR>
<ClassMR>1</ClassMR>
<ClassHR>1</ClassHR>
<ClassHC>0</ClassHC>
<ClassMC>0</ClassMC>
<ClassR>3</ClassR>
</PostCode>
<PostCode>
<Code abbr="2006"></Code>
<Learner>389</Learner>
<P1>103</P1>
<P2>177</P2>
<Unrestricted>2,682</Unrestricted>
<ClassC>3,242</ClassC>
<ClassLR>14</ClassLR>
<ClassMR>34</ClassMR>
<ClassHR>37</ClassHR>
<ClassHC>9</ClassHC>
<ClassMC>0</ClassMC>
<ClassR>317</ClassR>
</PostCode>
</quarter>
</data>
这里是我的XSL源
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:param name="Code"/>
<xsl:param name="quarter"/>
<xsl:param name="sortBy" select="'ClassC'"/>
<xsl:param name="order" select="'descending'"/>
<xsl:template match="data">
<data>
<quarter>
<xsl:apply-templates select="quarter[@qt=$quarter]">
</xsl:apply-templates>
</quarter>
</data>
</xsl:template>
<xsl:template match="quarter">
<xsl:apply-templates select="PostCode/Code[@abbr=$Code]" >
</xsl:apply-templates>
</xsl:template>
<xsl:template match="Code">
<xsl:for-each select="..">
<xsl:sort select="ClassC" data-type="number" order="descending"/>
//here is my key code
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
但是我不能排序的“ ClassC“,结果是
?xml version="1.0" encoding="UTF-8"?><data><quarter><PostCode>
<Code abbr="2000"/>
<Learner>1,116</Learner>
<P1>99993</P1>
<P2>402</P2>
<Unrestricted>10,137</Unrestricted>
<ClassC>11564</ClassC>
<ClassLR>69</ClassLR>
<ClassMR>74</ClassMR>
<ClassHR>108</ClassHR>
<ClassHC>43</ClassHC>
<ClassMC>4</ClassMC>
<ClassR>976</ClassR>
</PostCode><PostCode>
<Code abbr="2000"/>
<Learner>3</Learner>
<P1>1111111111111</P1>
<P2>3</P2>
<Unrestricted>14</Unrestricted>
<ClassC>200000000000</ClassC>
<ClassLR>0</ClassLR>
<ClassMR>1</ClassMR>
<ClassHR>1</ClassHR>
<ClassHC>0</ClassHC>
<ClassMC>0</ClassMC>
<ClassR>3</ClassR>
</PostCode>
</quarter>
</data>
大家好,我被要求通过= C类来订购xml数据,以后再做其他事情。 但我遇到了一个非常大的问题! 谁能告诉我如何做到这一点? 因为我不知道热解决这个问题吗?这太啰嗦了!
答
你还没有很好的解释这导致你想分别要排序,如果你想在PostCode
元素,然后下面是一个例子做,简单地通过确保xsl:sort
用于在一个xsl:apply-templates
排序的元素PostCode
元素:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:param name="Code">2000</xsl:param>
<xsl:param name="quarter">3</xsl:param>
<xsl:param name="sortBy" select="'ClassC'"/>
<xsl:param name="order" select="'descending'"/>
<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="data">
<data>
<quarter>
<xsl:apply-templates select="quarter[@qt=$quarter]"/>
</quarter>
</data>
</xsl:template>
<xsl:template match="quarter">
<xsl:apply-templates select="PostCode[Code[@abbr=$Code]]" >
<xsl:sort select="Code/*[local-name() = $sortBy]" order="{$order}" data-type="number"/>
</xsl:apply-templates>
</xsl:template>
</xsl:transform>
在网上http://xsltransform.net/bEzjRKS,结果是
<?xml version="1.0" encoding="utf-8"?>
<data>
<quarter>
<PostCode>
<Code abbr="2000"/>
<Learner>1,116</Learner>
<P1>99993</P1>
<P2>402</P2>
<Unrestricted>10,137</Unrestricted>
<ClassC>11564</ClassC>
<ClassLR>69</ClassLR>
<ClassMR>74</ClassMR>
<ClassHR>108</ClassHR>
<ClassHC>43</ClassHC>
<ClassMC>4</ClassMC>
<ClassR>976</ClassR>
</PostCode>
<PostCode>
<Code abbr="2000"/>
<Learner>3</Learner>
<P1>11</P1>
<P2>3000000000000</P2>
<Unrestricted>14</Unrestricted>
<ClassC>20</ClassC>
<ClassLR>0</ClassLR>
<ClassMR>1</ClassMR>
<ClassHR>1</ClassHR>
<ClassHC>0</ClassHC>
<ClassMC>0</ClassMC>
<ClassR>3</ClassR>
</PostCode>
</quarter>
</data>
能否请你降低你的XML到发生问题的部分?实际发生了什么问题?正在使用什么软件......这个问题根本不清楚! –