非常简单,我试图按另一项列出项目-我尝试通过仅具有两个级别的乐队名称及其CD来使其变得简单
我正在尝试许多不同的方法-但无法获得xsl将xml分解为表中的单独列。
它实际上是针对房地产网站的,应该显示某些房地产的租金-但要使乐队及其CD的使用变得容易,...
我的XML
<catalog>
<artist>
<name>Band 1</name>
<titles>
<title>CD Title 1</title>
<title>CD Title 2</title>
<title>CD Title 3</title>
<title>CD Title 4</title>
<title>CD Title 5</title>
<title>CD Title 6</title>
<title>CD Title 7</title>
</titles>
</artist>
<artist>
<name>Band 2</name>
<titles>
<title>CD Title 10</title>
<title>CD Title 20</title>
<title>CD Title 30</title>
</titles>
</artist>
<artist>
<name>Band 3</name>
<titles>
<title>CD Title 100</title>
<title>CD Title 200</title>
<title>CD Title 300</title>
<title>CD Title 400</title>
<title>CD Title 500</title>
<title>CD Title 600</title>
<title>CD Title 700</title>
<title>CD Title 800</title>
</titles>
</artist>
</catalog>
我的XSL
<xsl:template match="/">
<html>
<body>
<table border="1">
<tr bgcolor="#ff3366">
<th>Artist</th>
<th>Title</th>
</tr>
<xsl:for-each select="catalog/artist">
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="titles"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
我想要什么!
<table border="1">
<tr>
<th>Artist</th>
<th>Title</th>
</tr>
<tr>
<td>Band 1</td>
<td>CD Title 1</td>
<tr><td></td><td>CD Title 2</td></tr>
<tr><td></td><td>CD Title 3</td></tr>
<tr><td></td><td>CD Title 4</td></tr>
<tr><td></td><td>CD Title 6</td></tr>
<tr><td></td><td>CD Title 7</td></tr>
<tr><td></td><td>CD Title 8</td></tr>
</tr>
<tr>
<td>Band 2</td>
<td>CD Title 10</td>
<tr><td></td><td>CD Title 20</td></tr>
<<tr><td></td><td>CD Title 30</td></tr>
<tr><td></td><td>CD Title 40</td></tr>
<<tr><td></td><td>CD Title 50</td></tr>
<tr><td></td><td>CD Title 60</td></tr>
</tr>
<tr>
<td>Band 3</td>
<<td>CD Title 100</td>
<tr><td></td><td>CD Title 200</td></tr>
<tr><td></td><td>CD Title 300</td></tr>
<tr><td></td><td>CD Title 400</td></tr>
</tr>
</table>
What I get
<html>
<body>
<table border="1">
<tr bgcolor="#ff3366">
<th>Artist</th>
<th>Title</th>
</tr>
<tr>
<td>Band 1</td>
<td>CD Title 1CD Title 2CD Title 3CD Title 4CD Title 5CD Title 6CD Title 7</td>
</tr>
<tr>
<td>Band 2</td>
<td>CD Title 10CD Title 20CD Title 30</td>
</tr>
<tr>
<td>Band 3</td>
<td>CD Title 100CD Title 200CD Title 300CD Title 400CD Title 500CD Title 600CD Title 700CD Title 800</td>
</tr>
</table>
</body>
</html>
答案 0 :(得分:0)
我怀疑您想要的HTML结果是否正确,因为您的第一个cap
会出现异常情况。
因此,以下XSLT-1.0代码将创建(希望)所需的结果。我还将样式表的组织方式从title
循环更改为模板。
for-each
其结果是:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" />
<xsl:template match="/catalog">
<html>
<body>
<table border="1">
<tr bgcolor="#ff3366">
<th>Artist</th>
<th>Title</th>
</tr>
<xsl:apply-templates select="artist" />
</table>
</body>
</html>
</xsl:template>
<xsl:template match="artist">
<tr>
<td><xsl:value-of select="name"/></td>
<xsl:apply-templates select="titles/title" />
</tr>
</xsl:template>
<xsl:template match="title[1]">
<td><xsl:value-of select="text()"/></td>
</xsl:template>
<xsl:template match="title">
<tr>
<td><xsl:value-of select="text()"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
在大家的帮助下,我终于想出了这件事!
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" />
<xsl:template match="/catalog">
<html>
<body>
<table border="1">
<tr bgcolor="#ff3366">
<th>Artist</th>
<th>Title</th>
</tr>
<xsl:apply-templates select="artist" />
</table>
</body>
</html>
</xsl:template>
<xsl:template match="artist">
<tr>
<td><xsl:value-of select="name"/></td>
<xsl:apply-templates select="titles/title" />
</tr>
</xsl:template>
<xsl:template match="title[1]">
<td><xsl:value-of select="text()"/></td>
</xsl:template>
<xsl:template match="title">
<tr>
<td></td>
<td><xsl:value-of select="text()"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>