我是XSLT的新手,在尝试使用XSLT2和altovaXML处理器时遇到以下问题。
<?xml version="1.0"?>
<document>
<row>
<WEEK>11</WEEK>
<PERIOD>201103</PERIOD>
<ILPROD>some item</ILPROD>
<CNME>some name</CNME>
<QTY>100</QTY>
<SP>40</SP>
<REV>4000</REV>
<COST>2000</COST>
<VA>2000</VA>
<VAP>50</VAP>
</row>
</document>
我的XSL如下
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<html>
<body>
<h2>Some text</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Analysis</th>
</tr>
<xsl:for-each-group select="document/row" group-by="ILPROD">
<xsl:for-each select="current-group()">
<tr>
<td><xsl:value-of select="WEEK"/></td>
<td><xsl:value-of select="PERIOD"/></td>
<td><xsl:value-of select="ILPROD"/></td>
</tr>
</xsl:for-each>
<tr><td> </td></tr>
</xsl:for-each-group>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
很简单,我正在尝试按“ILPROD”子节点进行分组,并在每个组后输出一个空格。听起来很简单,但我显然犯了一个基本错误,因为处理器说它无法加载文档。如果我删除分组,它可以正常工作。
我出错的任何想法?
答案 0 :(得分:1)
尝试使用以下代替&amp; nbsp(顺便错过分号):
<tr><td colspan="3"><br></br></td></tr>
不要忘记将输出更改为html:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<body>
<h2>Some text</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Analysis</th>
</tr>
<xsl:for-each-group select="document/row" group-by="ILPROD">
<xsl:for-each select="current-group()">
<tr>
<td><xsl:value-of select="WEEK"/></td>
<td><xsl:value-of select="PERIOD"/></td>
<td><xsl:value-of select="ILPROD"/></td>
</tr>
</xsl:for-each>
<tr><td colspan="3"><br></br></td></tr>
</xsl:for-each-group>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
当我在Altova XML中运行它时,我得到了正确的输出:
<html>
<body>
<h2>Some text</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Analysis</th>
</tr>
<tr>
<td>11</td>
<td>201103</td>
<td>some item</td>
</tr>
<tr>
<td colspan="3"><br></td>
</tr>
</table>
</body>
</html>