2016-11-23 100 views
0

如何根據InfoNo屬性先排序xml,然後使用xsl使用模板排序SeqNo屬性。我試着在XSL但我只能在一個屬性做根據兩個屬性排序

輸入XML:

 <Customer> 
      <Info InfoNo="2" SeqNo="1" > 
       <LastName>Wilson</LastName> 
       <GivenName>Kelley</GivenName> 
      </Info> 
      <Info InfoNo="4" SeqNo="1" > 
       <LastName>Graham</LastName> 
       <GivenName>Tom</GivenName> 
      </Info> 
      <Info InfoNo="1" SeqNo="3" > 
       <LastName>Fisher</LastName> 
       <GivenName>Elaine</GivenName> 
      </Info> 
      <Info InfoNo="1" SeqNo="2" "> 
       <LastName>Gary</LastName> 
       <GivenName>Jerry</GivenName> 
      </Info> 
      <Info InfoNo="1" SeqNo="1" > 
       <LastName>Timothy</LastName> 
       <GivenName>Kathy</GivenName> 
      </Info> 
      <Info InfoNo="3" SeqNo="1" > 
       <LastName>Tim</LastName> 
       <GivenName>Kerry</GivenName> 
      </Info> 
      <Info InfoNo="1" SeqNo="4" > 
       <LastName>Rob</LastName> 
       <GivenName>Tony</GivenName> 
      </Info> 
     </Customer> 

預期輸出XML:

<Customer> 
      <Info InfoNo="1" SeqNo="1" > 
       <LastName>Timothy</LastName> 
       <GivenName>Kathy</GivenName> 
      </Info> 
      <Info InfoNo="1" SeqNo="2" "> 
       <LastName>Gary</LastName> 
       <GivenName>Jerry</GivenName> 
      </Info> 
      <Info InfoNo="1" SeqNo="3" > 
       <LastName>Fisher</LastName> 
       <GivenName>Elaine</GivenName> 
      </Info> 
      <Info InfoNo="1" SeqNo="4" > 
       <LastName>Rob</LastName> 
       <GivenName>Tony</GivenName> 
      </Info>     
      <Info InfoNo="2" SeqNo="1" > 
       <LastName>Wilson</LastName> 
       <GivenName>Kelley</GivenName> 
      </Info> 
      <Info InfoNo="3" SeqNo="1" > 
       <LastName>Tim</LastName> 
       <GivenName>Kerry</GivenName> 
      </Info>     
      <Info InfoNo="4" SeqNo="1" > 
       <LastName>Graham</LastName> 
       <GivenName>Tom</GivenName> 
      </Info> 
     </Customer>  

需要它xslt1.0

+0

「我試過xsl,但我只能做一個屬性」:那麼爲什麼你不能寫兩個'xsl:sort'呢? –

回答

0

使用兩<xsl:sort> s爲此:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/Customer"> 
    <Customer> 
    <xsl:for-each select="Info"> 
     <xsl:sort select="@InfoNo" data-type="number" /> 
     <xsl:sort select="@SeqNo" data-type="number" /> 
     <xsl:copy-of select="." /> 
    </xsl:for-each> 
    </Customer> 
</xsl:template> 

</xsl:stylesheet>