寻求通用XSLT模板:将任意结构XML转换为HTML表格
通用XSLT模板:将任意结构XML转换为嵌套HTML表格
以下是完全通用的XSLT 1.0模板,可处理任意结构的XML(任意元素名称、随机排列、任意层级嵌套、元素数量不限),转换为符合需求的嵌套HTML表格,同时准确保留空单元格内容。
XSLT模板代码
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" indent="yes" encoding="UTF-8"/> <!-- 匹配XML根节点,生成HTML基础结构 --> <xsl:template match="/"> <!DOCTYPE html> <html> <head> <style> table, th, td { border: 1px solid black; border-collapse: collapse; padding: 4px; } th { background-color: #f0f0f0; } </style> </head> <body> <!-- 处理根节点下的所有子元素,每个顶级元素生成一个独立表格 --> <xsl:apply-templates select="*"/> </body> </html> </xsl:template> <!-- 匹配任意元素,生成表格 --> <xsl:template match="*"> <table> <!-- 生成表头:取当前元素的所有直接子元素的唯一标签名 --> <tr> <xsl:for-each select="*[not(position() > 1) or name() != name(preceding-sibling::*[1])]"> <th><xsl:value-of select="name()"/></th> </xsl:for-each> </tr> <!-- 生成数据行:当前元素的每一组同层级子元素为一行 --> <tr> <xsl:apply-templates select="*" mode="cell"/> </tr> </table> <br/> </xsl:template> <!-- 处理表格单元格:递归嵌套表格或显示文本 --> <xsl:template match="*" mode="cell"> <td> <!-- 如果当前元素有子元素,递归生成嵌套表格;否则显示文本(空元素显示空单元格) --> <xsl:choose> <xsl:when test="*"> <xsl:apply-templates select="."/> </xsl:when> <xsl:otherwise> <xsl:value-of select="text()"/> </xsl:otherwise> </xsl:choose> </td> </xsl:template> <!-- 处理文本节点(过滤多余空白) --> <xsl:template match="text()"> <xsl:if test="normalize-space(.) != ''"> <xsl:value-of select="normalize-space(.)"/> </xsl:if> </xsl:template> </xsl:stylesheet>
核心功能说明
- 全结构适配:无需预先定义XML元素规则,自动识别任意元素名称、嵌套层级和元素数量
- 空单元格保留:空元素会生成空
<td>标签,完整保留原XML的结构信息 - 无限嵌套支持:元素包含子元素时,自动在单元格内生成嵌套表格,支持多层级嵌套展示
- 智能表头生成:自动提取当前元素直接子元素的唯一标签名作为表头,确保列与元素类型一一对应
- 基础样式优化:默认配置边框合并、内边距和表头背景色,提升表格可读性
测试场景示例
场景1:无嵌套简单XML
<root> <data> <a>d</a> <b>e</b> <c/> </data> </root>
转换后输出表格:
<table> <tr> <th>a</th> <th>b</th> <th>c</th> </tr> <tr> <td>d</td> <td>e</td> <td></td> </tr> </table>
场景2:多层嵌套XML
<root> <group> <a>d</a> <b> <sub> <e>h</e> <f>i</f> <g>j</g> </sub> <sub> <e>k</e> <f>l</f> <g>m</g> </sub> </b> <c>n</c> </group> </root>
转换后会生成外层表格,其中<b>单元格内自动嵌套一个表格,对应<sub>的内容,与你提供的示例效果完全匹配。
内容的提问来源于stack exchange,提问作者jennab
相关产品推荐
相关产品推荐

