嗨,我是 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有什么建议吗?
这是一个简单但冗长的方法:
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>
的根元素。