我尝试根据特定子节点的值将以下XML文档转换为多个表。以下是我的XML的样子:
<?xml version="1.0" encoding="ISO8859-1"?>
<?xml-stylesheet type="text/xsl" href="AlbumsTranformedToXSL.xsl"?>
<!--<?xml-stylesheet type="text/xsl" href="addCountryAttribute.xsl"?>-->
<Albums>
<Album>
<Name>Empire Burlesque</Name>
<Artist>Bob Dylan</Artist>
<Country>USA</Country>
<Company>Columbia</Company>
<Date>19880610</Date>
</Album>
<Album>
<Name>Hide your heart</Name>
<Artist>Bonnie Tylor</Artist>
<Country>UK</Country>
<Company>CBS Records</Company>
<Price>9.90</Price>
<Date>19880509</Date>
</Album>
</Albums>
这是我目前的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>
<table border="2" bgcolor="transparent">
<tr bgcolor="grey">
<th>Artist</th>
<th>Title</th>
</tr>
<xsl:for-each select="Albums/Album">
<xsl:sort select="Date" />
<!--printing table-->
<tr>
<td>
<xsl:value-of select="Artist" />
</td>
<td>
<xsl:value-of select="Name" />
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
目前我的XSL将XML转换为一个表,但我试图将其拆分为几个表 - 每个“Country”标签的一个不同的表(即来自美国的专辑表,另一个来自英国专辑的表)等等。)。我怎样才能实现呢?
我花了好几个小时试图实现我发现的几种方法,但似乎没有什么对我有用(可能是由于我缺乏XSL知识......)。我将非常感谢这里的一点指导。谢谢!
答案 0 :(得分:0)
您可以使用 Muenchian方法尝试以下模板 - 一种XSLT-1.0方法,可以将 WebBrowsers 中的元素分组,如 Firefox , IE 或 Chrome :
<?xml version='1.0' encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="country" match="Album" use="Country" />
<xsl:template match="/Albums">
<html>
<body>
<xsl:for-each select="Album[generate-id() = generate-id(key('country',Country)[1])]">
<table border="2" bgcolor="transparent">
<tr bgcolor="grey">
<th>Artist</th>
<th>Title</th>
</tr>
<xsl:for-each select="key('country',Country)">
<xsl:sort select="Date" order="ascending"/> <!-- here you decide what elements are at the top -->
<!--printing table-->
<tr>
<td>
<xsl:value-of select="Artist" />
</td>
<td>
<xsl:value-of select="Name" />
</td>
</tr>
</xsl:for-each>
</table>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
上述模板会将您的元素排序为两个表。每个Country
示例一个。如果你有更多的国家,那么当然会有更多的表格。元素的顺序由xsl:sort
中的xsl:for-each
决定。