我刚刚创建了一个对我的XML进行排序的XSL文件。 现在我想添加,所以我可以只对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>
答案 0 :(得分:2)
不确定具体要求是什么,但也许这样的事情可能对您有所帮助:
<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>