我有一个问题,我想以特定顺序在浏览器中呈现汽车列表,但XML的顺序不同(不能更改)。
如何编写我的XSL以按照最高速度排列相同品牌的汽车?
XML:
<?xml version="1.0" encoding="UTF-8"?>
<Vehicle>
<Car>
<Make>Audi</Make>
<Model>R8</Model>
<TopSpeed>200</TopSpeed>
</Car>
<Car>
<Make>Lamborghini</Make>
<Model>Aventador</Model>
<TopSpeed>250</TopSpeed>
</Car>
<Car>
<Make>Ferrari</Make>
<Model>TDF</Model>
<TopSpeed>220</TopSpeed>
</Car>
<Car>
<Make>Lamborghini</Make>
<Model>Gallardo</Model>
<TopSpeed>200</TopSpeed>
</Car>
</Vehicle>
XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My Car Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Make</th>
<th style="text-align:left">Model</th>
<th style="text-align:left">Top Speed</th>
</tr>
<xsl:for-each select="Vehicle/Car">
<tr>
<td><xsl:value-of select="Make"/></td>
<td><xsl:value-of select="Model"/></td>
<td><xsl:value-of select="TopSpeed"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
按以下顺序输出表格:
但是我试图让两个兰博基尼在订单之后出现一个,最高的最高速度。
任何帮助将不胜感激。
答案 0 :(得分:1)
如评论所示,请考虑使用 $(".event-date-visit").each(function() {
$(this).detach().prependTo($(this).closest('.wp-posts-carousel-image'));
});
:
<xsl:sort>
<强>输出强>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output version="1.0" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:key name="makeid" match="Car" use="Make" />
<xsl:template match="Vehicle">
<html>
<body>
<h2>My Car Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Make</th>
<th style="text-align:left">Model</th>
<th style="text-align:left">Top Speed</th>
</tr>
<xsl:apply-templates select="Car[generate-id() = generate-id(key('makeid', Make)[1])]"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="Car[generate-id() = generate-id(key('makeid', Make)[1])]">
<xsl:for-each select="key('makeid',Make)">
<xsl:sort select="TopSpeed" order="descending" data-type="number"/>
<tr>
<td><xsl:value-of select="Make"/></td>
<td><xsl:value-of select="Model"/></td>
<td><xsl:value-of select="TopSpeed"/></td>
</tr>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
这是Muenchian分组的另一个例子,但略有不同。它也会按照Top Speed排序之前按Make排序。
XML输入(修改后更不顺序)
<Vehicle>
<Car>
<Make>Lamborghini</Make>
<Model>Gallardo</Model>
<TopSpeed>200</TopSpeed>
</Car>
<Car>
<Make>Audi</Make>
<Model>R8</Model>
<TopSpeed>200</TopSpeed>
</Car>
<Car>
<Make>Lamborghini</Make>
<Model>Aventador</Model>
<TopSpeed>250</TopSpeed>
</Car>
<Car>
<Make>Ferrari</Make>
<Model>TDF</Model>
<TopSpeed>220</TopSpeed>
</Car>
</Vehicle>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="carsByMake" match="Car" use="Make"/>
<xsl:template match="/*">
<html>
<body>
<h2>My Car Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Make</th>
<th style="text-align:left">Model</th>
<th style="text-align:left">Top Speed</th>
</tr>
<xsl:for-each select="Car[count(.|key('carsByMake',Make)[1])=1]">
<xsl:sort select="Make"/>
<xsl:for-each select="key('carsByMake',Make)">
<xsl:sort select="TopSpeed" order="descending"/>
<tr>
<td><xsl:value-of select="Make"/></td>
<td><xsl:value-of select="Model"/></td>
<td><xsl:value-of select="TopSpeed"/></td>
</tr>
</xsl:for-each>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
<html>
<body>
<h2>My Car Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Make</th>
<th style="text-align:left">Model</th>
<th style="text-align:left">Top Speed</th>
</tr>
<tr>
<td>Audi</td>
<td>R8</td>
<td>200</td>
</tr>
<tr>
<td>Ferrari</td>
<td>TDF</td>
<td>220</td>
</tr>
<tr>
<td>Lamborghini</td>
<td>Aventador</td>
<td>250</td>
</tr>
<tr>
<td>Lamborghini</td>
<td>Gallardo</td>
<td>200</td>
</tr>
</table>
</body>
</html>
&#13;