我有一个带有键值对的多个实体(我的例子中为<data>
)。每个实体包含相同顺序的相同键,但我不知道哪个和多少。如何使用XSLT将其转换为HTML表,具有表头中的键和表行中实体的值?
<data>
<entry>
<key>id</key><value>12345</value>
</entry>
<entry>
<key>price</key><value>12.45</value>
</entry>
<entry>
<key>country</key><value>UK</value>
</entry>
<data>
<data>
<entry>
<key>id</key><value>67890</value>
</entry>
<entry>
<key>price</key><value>67.89</value>
</entry>
<entry>
<key>country</key><value>DE</value>
</entry>
<data>
......应该成为......
<tr><th>id</th><th>price</th><th>country</th></tr>
<tr><td>12345</td><td>12.45</td><td>UK</td></tr>
<tr><td>67890</td><td>67.89</td><td>DE</td></tr>
答案 0 :(得分:2)
使用:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<table>
<tr>
<xsl:for-each select="//data[1]/entry">
<th>
<xsl:value-of select="key"/>
</th>
</xsl:for-each>
</tr>
<xsl:apply-templates select="//data"/>
</table>
</xsl:template>
<xsl:template match="data">
<tr>
<xsl:apply-templates select="entry"/>
</tr>
</xsl:template>
<xsl:template match="entry">
<td>
<xsl:value-of select="value"/>
</td>
</xsl:template>
</xsl:stylesheet>
输出:
<table>
<tr>
<th>id</th>
<th>price</th>
<th>country</th>
</tr>
<tr>
<td>12345</td>
<td>12.45</td>
<td>UK</td>
</tr>
<tr>
<td>67890</td>
<td>67.89</td>
<td>DE</td>
</tr>
</table>