2017-10-15 80 views
0

这里的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数据,以后再做其他事情。 但我遇到了一个非常大的问题! 谁能告诉我如何做到这一点? 因为我不知道热解决这个问题吗?这太啰嗦了!

+0

能否请你降低你的XML到发生问题的部分?实际发生了什么问题?正在使用什么软件......这个问题根本不清楚! –

回答

0

你还没有很好的解释这导致你想分别要排序,如果你想在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>