我想创建一个看起来像这样的表:
来自这个典型的XML文件
<test>
<criteria nom="DR">
<abbr>DR</abbr>
<value>0.123456</value>
<value>0.134679</value>
<value>0.976431</value>
<rating></rating>
</criteria>
<criteria nom="MOTA">
<abbr>MOTA</abbr>
<value>0.132465</value>
<value>0.321645</value>
<value>0.649715</value>
<rating></rating>
</criteria>
<criteria nom="PFR">
<abbr>PFR</abbr>
<value>0.914375</value>
<value>0.467985</value>
<value>0.162356</value>
<rating></rating>
</criteria>
</test>
但我无法想象如何做到这一点。 用Google搜索并在此处搜索stackoverflow但没有成功。
我创建表的代码目前如下所示:
<xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>YAML</title>
</head>
<body>
<table width="1000" border="1" cellspacing="0" cellpadding="0">
<tr>
<xsl:for-each select="test/criteria">
<th scope="col"><xsl:value-of select="@nom" /></th>
</xsl:for-each>
</tr>
<xsl:for-each select="test/criteria/value">
<tr>
<td><xsl:value-of select="text()"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
答案 0 :(得分:1)
试试这个:
<xsl:for-each select="test/criteria">
<tr>
<xsl:for-each select="value">
<td><xsl:value-of select="text()"/></td>
</xsl:for-each>
</tr>
</xsl:for-each>
取代:
<xsl:for-each select="test/criteria/value">
<tr>
<td><xsl:value-of select="text()"/></td>
</tr>
</xsl:for-each>
答案 1 :(得分:1)
尝试将xsl:for-each
上的当前test/criteria/value
更改为此..
<xsl:for-each select="test/criteria[1]/value">
<xsl:variable name="pos" select="position()" />
<tr>
<xsl:for-each select="/test/criteria/value[$pos]">
<td><xsl:value-of select="text()"/></td>
</xsl:for-each>
</tr>
</xsl:for-each>
也就是说,只选择第一个条件中的value
元素,获取位置,然后获取在该位置发生的所有条件value
元素,因为它们是构成您的位置的元素行。
请注意,这确实假设所有criteria
具有相同数量的value
个节点。
完整的XSLT ....
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>YAML</title>
</head>
<body>
<table width="1000" border="1" cellspacing="0" cellpadding="0">
<tr>
<xsl:for-each select="test/criteria">
<th scope="col"><xsl:value-of select="@nom" /></th>
</xsl:for-each>
</tr>
<xsl:for-each select="test/criteria[1]/value">
<xsl:variable name="pos" select="position()" />
<tr>
<xsl:for-each select="/test/criteria/value[$pos]">
<td><xsl:value-of select="text()"/></td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>