我想基于以下XML表创建一个包含XSL的HTML表。目标是创建一个包含所有公司名称及其所有产品名称的表。
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<Companies>
<Company CompanyID="1">
<CompanyInfo>
<Name>ABC</Name>
<ProductNames>
<ProductName Name="Product 1" />
<ProductName Name="Product 2" />
<ProductName Name="Product 3" />
<ProductName Name="Product 4" />
</ProdcutNames>
</CompanyInfo>
</Company>
<Company CompanyID="2">
<CompanyInfo>
<Name>TVM</Name>
<ProductNames>
<ProductName Name="Product A" />
<ProductName Name="Product B" />
<ProductName Name="Product C" />
<ProductName Name="Product D" />
</ProdcutNames>
</CompanyInfo>
</Company>
</Companies>
目前我有以下XSL表(这还不够)。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="/">
<html>
<body>
<h2>Table View</h2>
<table border="1">
<th>Name</th>
<th>ProductName</th>
</tr>
<xsl:for-each select="Companies/Company/CompanyInfo">
<tr>
<td><xsl:value-of select="Name" /></td>
<td><xsl:value-of select="ProductNames/ProductName/@Name" /></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
目标输出应如下所示:
<table>
<tr>
<th>CompanyName</th>
<th>ProductName</th>
</tr>
<tr>
<td>ABC</td>
<td>Product 1</td>
</tr>
<tr>
<td>ABC</td>
<td>Product 2</td>
</tr>
<tr>
<td>ABC</td>
<td>Product 3</td>
</tr>
<tr>
<td>ABC</td>
<td>Product 4</td>
</tr>
<tr>
<td>TVM</td>
<td>Product A</td>
</tr>
<tr>
<td>TVM</td>
<td>Product B</td>
</tr>
<tr>
<td>TVM</td>
<td>Product C</td>
</tr>
<tr>
<td>TVM</td>
<td>Product D</td>
</tr>
</table>
目前,我只能查看每家公司的1种产品,但不能全部查看。因此,我的目标是为每个产品创建一个具有相应公司名称的行。
如果有人可以帮助我,真的很棒!
答案 0 :(得分:1)
更改
<xsl:for-each select="Companies/Company/CompanyInfo">
<tr>
<td><xsl:value-of select="Name" /></td>
<td><xsl:value-of select="ProductNames/ProductName/@Name" /></td>
</tr>
</xsl:for-each>
到
<xsl:for-each select="Companies/Company/CompanyInfo/ProductNames/ProductName/@Name">
<tr>
<td><xsl:value-of select="ancestor::CompanyInfo/Name" /></td>
<td><xsl:value-of select="." /></td>
</tr>
</xsl:for-each>