You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求通用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>

核心功能说明

  1. 全结构适配:无需预先定义XML元素规则,自动识别任意元素名称、嵌套层级和元素数量
  2. 空单元格保留:空元素会生成空<td>标签,完整保留原XML的结构信息
  3. 无限嵌套支持:元素包含子元素时,自动在单元格内生成嵌套表格,支持多层级嵌套展示
  4. 智能表头生成:自动提取当前元素直接子元素的唯一标签名作为表头,确保列与元素类型一一对应
  5. 基础样式优化:默认配置边框合并、内边距和表头背景色,提升表格可读性

测试场景示例

场景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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:03:19