XSL множественная сортировка - PullRequest
1 голос
/ 18 декабря 2011

Я только что создал XSL-файл, который сортирует мой XML.Теперь я хочу добавить, чтобы я мог отсортировать только некоторые узлы в файле XML.

Как сортировать автомобили старше 10 лет в ценовой категории.В других языках я бы использовал IF и ELSE, но не могу понять это.

Это то, что я уже сделал:

XML-файл

<autoads>
    <ad>
        <type>1</type>
        <name>Honda</name>
        <model>XL 1000 V</model>
        <regyear>2001</regyear>
        <price>129900</price>
        <adtext>2001 Honda XL 1000 V, 8.900 km. hög vindruta. Pris 129.900kr,-.  </adtext>
        <addate>20020115</addate>
        <volume>1000</volume>
        <category></category>
    </ad>
    <ad>
        <type>2</type>
        <name>Nissan</name>
        <model>Almera 1.4S</model>
        <regyear>1997</regyear>
        <price>119000</price>
        <adtext>1997 Nissan Almera 1.4S, 5 dörrar, met, 70.000 km. el.spegel/fönster, galv. kaross, c.lås, startspärr, airbag, nedfällb. baks. ABS, ute temp. R/CD, alarm, d.fäste, v.säten, s/v-hj.  EU-godk. full service, servo. Pris 119.000 kr,-.  </adtext>
        <addate>20020118</addate>
        <volume>0</volume>
        <category>5 dörrar</category>
    </ad>
    </autoads>

И мой XSL-файл

<?xml version="1.0" encoding="iso-8859-1"?> 
<xsl:stylesheet version="1.0"  
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 

<html> 
<body>       

<xsl:apply-templates select="//ad">   
<xsl:sort select="regyear" />

</xsl:apply-templates>   
</body> 
</html> 
</xsl:template> 

<xsl:template match="ad">


<tr>
<td>
<h3>
Märke : <br />
<xsl:value-of select="name" />
</h3>
</td>
<td>
<h4>
Modell : <br />
<xsl:value-of select="model" />
</h4>
</td>
<td>
<h5>
Årsmodell :<br />
<xsl:value-of select="regyear" />
</h5>
</td>
<td>
<h5>
Pris : 
<xsl:value-of select="price" /> 
</h5>
</td>
<td>
<p>
Information : <br />
<xsl:value-of select="adtext" /> 
</p>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>

1 Ответ

2 голосов
/ 18 декабря 2011

Не уверен, каково точное требование, но, возможно, что-то подобное может помочь вам:

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

  <xsl:strip-space elements="*"/>
  <xsl:output indent="yes"/>
  <xsl:param name="cur-year" select="2011"/>

  <xsl:template match="/autoads">
    <xsl:copy>
      <xsl:apply-templates select="*[$cur-year - regyear > 10]">
        <xsl:sort select="regyear" data-type="number"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="@*|node()"><!-- copy template -->
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...