您好我是XSLT编程的新手,我使用的是XSLT 1.0版本 我有xml文件,我想转移到HTML表。 问题是如何将带有元素的节点复制到另一个表中?
这是XML输入
<root>
<element>
<id> 1 </id>
<data> aa </data>
</element>
<element>
<id> 2 </id>
<err> y </err>
<data> bb </data>
</element>
<element>
<id> 3 </id>
<data> cc </data>
</element>
<element>
<id> 4 </id>
<err> x </err>
<data> dd </data>
</element>
</root>
这是预期的输出:
<table>
<thead>
<th> ID </th>
<th> Error </th>
</thead>
<tbody>
<tr>
<td> 2 </td>
<td> y </td>
</tr>
<tr>
<td> 4 </td>
<td> x </td>
</tr>
</tbody>
</table>
<table>
<thead>
<th> ID </th>
<th> Data </th>
</thead>
<tbody>
<tr>
<td> 1 </td>
<td> aa </td>
</tr>
<tr>
<td> 2 </td>
<td> bb </td>
</tr>
<tr>
<td> 3 </td>
<td> aa </td>
</tr>
<tr>
<td> 4 </td>
<td> bb </td>
</tr>
</tbody>
</table>
我正在使用XSLT 1.0 有什么建议?
答案 0 :(得分:1)
这是一个简单但虽然冗长的方式:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<root>
<table>
<thead>
<th>ID</th>
<th>Error</th>
</thead>
<tbody>
<xsl:for-each select="root/element[err]">
<tr>
<td><xsl:value-of select="id"/></td>
<td><xsl:value-of select="err"/></td>
</tr>
</xsl:for-each>
</tbody>
</table>
<table>
<thead>
<th>ID</th>
<th>Data</th>
</thead>
<tbody>
<xsl:for-each select="root/element">
<tr>
<td><xsl:value-of select="id"/></td>
<td><xsl:value-of select="data"/></td>
</tr>
</xsl:for-each>
</tbody>
</table>
</root>
</xsl:template>
</xsl:stylesheet>
这是一种更聪明的方式:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<root>
<table>
<thead>
<th>ID</th>
<th>Error</th>
</thead>
<tbody>
<xsl:apply-templates select="root/element/err"/>
</tbody>
</table>
<table>
<thead>
<th>ID</th>
<th>Data</th>
</thead>
<tbody>
<xsl:apply-templates select="root/element/data"/>
</tbody>
</table>
</root>
</xsl:template>
<xsl:template match="err|data">
<tr>
<td><xsl:value-of select="../id"/></td>
<td><xsl:value-of select="."/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
上面假设格式正确的输入,其根元素名为<root>
。