2017-03-05 89 views
0

我需要對不同的值進行排序,但我無法使其正常工作。在XSL中使用排序

我的示例XML:

<?xml-stylesheet type="text/xsl" href="7.xsl"?> 
<immobles> 
    <ofertes> 
     <oferta estat="1">Venda</oferta> 
     <oferta estat="2">Lloguer</oferta> 
    </ofertes> 

    <categories> 
     <categoria cat="A">Pis</categoria> 
     <categoria cat="B">Casa</categoria> 
     <categoria cat="C">Duplex</categoria> 
    </categories> 

    <propietaris> 
     <propietari dni="400001">Fernando</propietari> 
     <propietari dni="400004">Berta</propietari> 
     <propietari dni="400002">Judit</propietari> 
     <propietari dni="400007">Manel</propietari> 
     <propietari dni="400003">Pilar</propietari> 
     <propietari dni="400005">Jordi</propietari>  
    </propietaris> 

    <immobiliaries> 
     <immobiliaria codi="I1">Home sweet home</immobiliaria> 
     <immobiliaria codi="I2">Com a casa enlloc</immobiliaria> 
     <immobiliaria codi="I3">Llar de foc</immobiliaria> 
     <immobiliaria codi="I4">Pisos penyasegat</immobiliaria> 
    </immobiliaries> 

    <propietats> 
     <propietat id="1" oferta="1" propietari="400003"> 
      <nom>Pis a l'eixample</nom> 
      <categoria cat="A"/> 
      <valorat>145000</valorat> 
      <preu>520</preu> 
      <companyies> 
       <companyia comp="I3" /> 
       <companyia comp="I4" /> 
      </companyies> 
     </propietat> 

     <propietat id="2" oferta="2" propietari="400001"> 
      <nom>Casa moderna 4 habitacions</nom> 
      <categoria cat="B"/> 
      <valorat>358000</valorat> 
      <preu>350000</preu> 
      <companyies> 
       <companyia comp="I2" /> 
       <companyia comp="I3" /> 
      </companyies> 
     </propietat> 

     <propietat id="3" oferta="2" propietari="400002"> 
      <nom>Duplex emmoblat lluminós</nom> 
      <categoria cat="C"/> 
      <valorat>210000</valorat> 
      <preu>150000</preu> 
      <companyies> 
       <companyia comp="I1" /> 
      </companyies> 
     </propietat> 

     <propietat id="3" oferta="1" propietari="400005"> 
      <nom>Duplex centre</nom> 
      <categoria cat="C"/> 
      <valorat>160000</valorat> 
      <preu>340</preu> 
      <companyies> 
       <companyia comp="I4" /> 
       <companyia comp="I1" /> 
      </companyies> 
     </propietat> 

    </propietats> 
</immobles> 

我的XSL:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="/"> 
    <html> 
    <body> 
    <table border="1"> 
     <tr bgcolor="#9acd32"> 
     <th>Propietat en lloguer</th> 
     </tr> 
     <xsl:for-each select="//propietat"> 
     <xsl:variable name="idofer" select="@oferta" /> 
     <xsl:variable name="idcat" select="categoria/@cat" /> 
     <xsl:variable name="idpropi" select="@propietari" /> 
     <xsl:variable name="propiofer" select="//ofertes/oferta[@estat=$idofer]" /> 
     <xsl:variable name="propicat" select="//categories/categoria[@cat=$idcat]" /> 
     <xsl:variable name="propipropieari" select="//propietaris/propietari[@dni=$idpropi]" /> 
     <tr> 
     <xsl:choose> 
      <xsl:when test="$propiofer='Lloguer'"> 
      <xsl:apply-templates select="nom"> 
       <xsl:sort select="preu" order="ascending" /> 
       <xsl:sort select="$propicat" order="descending" /> 
       <xsl:sort select="$propipropietari" order="descending" /> 
      </xsl:apply-templates> 
      </xsl:when> 
      <xsl:otherwise> 
      </xsl:otherwise> 
     </xsl:choose> 
     </tr> 
     </xsl:for-each> 
    </table> 
    </body> 
    </html> 
    </xsl:template> 
</xsl:stylesheet> 

我需要他們preucategories/categoriapropietaris/propietari表明,在 「Lloguer」 ofertes/oferta值和訂單。

我不知道,如果我需要使用應用模板,或者如果我可以從其他途徑

+0

你能在這種情況下顯示你期望的輸出嗎?謝謝! –

+0

這個想法是從'propietat/nom','categories/categoria'和'propietaris/propietari'獲取元素。我明白,我表達不好 –

回答

0

首先做到,可以考慮使用一鍵查找您oferta元素。

<xsl:key name="ofertes" match="oferta" use="@estat" /> 

然後,只選擇propietat其中有 「Lloguer」 的oferta,你可以做到這一點....

<xsl:for-each select="//propietat[key('ofertes', @oferta)='Lloguer']"> 

您還可以使用鑰匙在你的排序。因此,由categoria值進行排序,你需要定義像這樣

<xsl:key name="categories" match="categoria" use="@cat" /> 

一個鍵,然後,你可以用它的排序是這樣的...

<xsl:for-each select="//propietat[key('ofertes', @oferta)='Lloguer']"> 
    <xsl:sort select="preu" order="ascending" /> 
    <xsl:sort select="key('categories', categoria/@cat)" order="descending" /> 

試試這個XSLT對於初學者。 ..

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:key name="ofertes" match="oferta" use="@estat" /> 
    <xsl:key name="categories" match="categoria" use="@cat" /> 
    <xsl:key name="propietaris" match="propietari" use="@dni" /> 

    <xsl:template match="/"> 
    <html> 
    <body> 
    <table border="1"> 
     <tr bgcolor="#9acd32"> 
     <th>Propietat en lloguer</th> 
     </tr> 
     <xsl:for-each select="//propietat[key('ofertes', @oferta)='Lloguer']"> 
     <xsl:sort select="preu" order="ascending" /> 
     <xsl:sort select="key('categories', categoria/@cat)" order="descending" /> 
     <xsl:sort select="key('propietaris', @propietari)" order="descending" /> 
     <tr> 
      <td><xsl:value-of select="nom" /></td> 
      <td><xsl:value-of select="key('categories', categoria/@cat)" /></td> 
      <td><xsl:value-of select="key('propietaris', @propietari)" /></td> 
     </tr> 
     </xsl:for-each> 
    </table> 
    </body> 
    </html> 
    </xsl:template> 
</xsl:stylesheet> 
+0

你的選擇看起來不錯,但鑰匙的確切功能是什麼?對不起,我開始使用 –

+0

Keys使您能夠更高效地從XML中查找其他值。在這裏閱讀有關它們的信息https://www.xml.com/pub/a/2002/02/06/key-lookups.html –