所以,我需要创建一个使用XSLT 1.0动态表。 我看了几篇文章/文章,但我似乎不能把它放在一起。 在许多情况下,会有好几个表格单元格数据为空。 在其他情况下,就会出现需要连接成一个单元的多个值。 下面是示例XML:
<Document>
<Records>
<User>
<Name>User1</Name>
<list xid="data.set">
<Data>
<Column>2</Column>
<Type>Carbs</Type>
<RowValue>Oatmeal</RowValue>
</Data>
<Data>
<Column>1</Column>
<Type>Protein</Type>
<RowValue>sausage</RowValue>
<RowValue>eggs</RowValue>
<RowValue>turkey</RowValue>
</Data>
</list>
</User>
<User>
<Name>User2</Name>
<list xid="data.set">
<Data>
<Type>Vegetables</Type>
<Column>8</Column>
<RowValue>Squash</RowValue>
</Data>
<Data>
<Column>3</Column>
<Type>Sweets</Type>
<RowValue>cake</RowValue>
<RowValue>cookies</RowValue>
</Data>
<Data>
<Column>5</Column>
<Type>Other</Type>
</Data>
<Data>
<Column>6</Column>
<Type>Beverage</Type>
<RowValue>grape juice</RowValue>
</Data>
</list>
</User>
<User>
<Name>User4</Name>
<list xid="data.set">
<Data>
<Column>7</Column>
<Type>Fats</Type>
<RowValue>cashews</RowValue>
</Data>
<Data>
<Column>8</Column>
<Type>Vegetables</Type>
<RowValue>Green Beans</RowValue>
</Data>
<Data>
<Column>2</Column>
<Type>Carbs</Type>
<RowValue>Brown Rice</RowValue>
</Data>
</list>
</User>
<User>
<Name>User5</Name>
<list xid="data.set">
<Data>
<Column>3</Column>
<Type>Sweets</Type>
<RowValue>gummy worms</RowValue>
</Data>
<Data>
<Column>4</Column>
<Type>Fruit</Type>
<RowValue>apples</RowValue>
</Data>
</list>
</User>
<User>
<Name>User5</Name>
<list xid="data.set">
<Data>
<Column>3</Column>
<Type>Sweets</Type>
<RowValue>gummy worms</RowValue>
</Data>
<Data>
<Column>4</Column>
<Type>Fruit</Type>
<RowValue>grapes</RowValue>
</Data>
</list>
</User>
<User>
<Name>User5</Name>
<list xid="data.set">
<Data>
<Column>3</Column>
<Type>Sweets</Type>
<RowValue>gummy worms</RowValue>
</Data>
<Data>
<Column>4</Column>
<Type>Fruit</Type>
<RowValue>grapes</RowValue>
</Data>
</list>
</User>
</Records>
</Document>
编辑:在HTML输出那里,当用户名存在不止一次在表格单元重复值(见下文)。 我想除去存在于每个小区中的重复的值,如“树胶状蠕虫,胶状蠕虫,胶状虫”。 例如,有三个“users5”上市。 我想保持包含每一行“USER5”,但在每个单元的那些行的删除重复值。
<table border="1">
<thead>
<tr>
<th>
</th>
<th>Protein</th>
<th>Carbs</th>
<th>Sweets</th>
<th>Fruit</th>
<th>Other</th>
<th>Beverage</th>
<th>Fats</th>
<th>Vegetables</th>
</tr>
<tr>
<th></th>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
<th>6</th>
<th>7</th>
<th>8</th>
</tr></thead><tbody><tr><th>User1</th>
<td>sausage, eggs, turkey</td>
<td>Oatmeal</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr><th>User2</th>
<td></td>
<td></td>
<td>cake, cookies</td>
<td></td>
<td></td>
<td>grape juice</td>
<td></td>
<td>Squash</td>
</tr>
<tr><th>User4</th>
<td></td>
<td>Brown Rice</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>cashews</td>
<td>Green Beans</td>
</tr>
<tr><th>User5</th>
<td></td>
<td></td>
<td>gummy worms, gummy worms, gummy worms</td>
<td>apples, grapes, grapes</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr><th>User5</th>
<td></td>
<td></td>
<td>gummy worms, gummy worms, gummy worms</td>
<td>apples, grapes, grapes</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr><th>User5</th>
<td></td>
<td></td>
<td>gummy worms, gummy worms, gummy worms</td>
<td>apples, grapes, grapes</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
这是我在努力使这项工作非常愚蠢的尝试。 我是个新手,温柔的请...
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:key name="food-by-Category" match="Data" use="Column" />
<xsl:key name="food-by-Value" match="Columns" use="RowValue" />
<xsl:template match="/Document/Records/User/list[@xid = 'data.set']">
<table><tr>
<xsl:for-each select="Data[count(. | key('food-by-Category', Column)[1]) = 1]">
<!-- Sort by the Category -->
<xsl:sort select="Column" />
<td>
<xsl:value-of select="Type" />
</td>
</xsl:for-each>
</tr>
<xsl:for-each select="Data[count(. | key('food-by-Category', Column)[1]) = 1]">
<tr>
<xsl:for-each select="key('food-by-Category', Column)">
<!-- Sort by the item Value -->
<xsl:sort select="RowValue" />
<td>
<xsl:value-of select="RowValue" />
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
正如你可以看到它不是分组表头/细胞一起或串联的值,当有多个<RowValue>。