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

如何用XSLT将含键值对属性的XML转换为HTML表格?

自定义XML转分组HTML表格的XSLT方案

原始XML结构

你的数据集采用如下格式,每个DataInstance对应一条数据,通过instanceId区分类型,字段通过带name属性的field元素定义:

<DataObjects>
  <ObjectSelect>
    <mdNm>my-catalog</mdNm>
    <meNm>Catalog Selection A1</meNm>
  </ObjectSelect>
  <DataInstances>
    <DataInstance>
      <instanceId>Cd</instanceId>
        <field name='title'>Empire Burlesque</field>
        <field name='artist'>Bob Dylan</field>
        <field name='country'>USA</field>
        <field name='company'>Columbia</field>
    </DataInstance>
    <DataInstance>
      <instanceId>Movie</instanceId>
        <field name='title'>Casablanca</field>
        <field name='director'>Michael Curtiz</field>
        <field name='genre'>Drama</field>
    </DataInstance>
  </DataInstances>
</DataObjects>

现有XSLT的问题

你提供的初始XSLT采用硬编码字段的方式,无法动态提取field元素的name属性作为行标题,也无法为每个instanceId生成独立的HTML表格。

期望HTML输出

需要为每个instanceId生成独立表格,每行第一列为字段名,第二列为字段值:

<html>
  <body>
    <h2>Catalog Selection A1</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th>Name</th>
        <th>Value</th>
      </tr>
      <tr>
        <td>Title</td>
        <td>Empire Burlesque</td>
      </tr>
      <tr>
        <td>Artist</td>
        <td>Bob Dylan</td>
      </tr>
      <tr>
        <td>Country</td>
        <td>USA</td>
      </tr>
      <tr>
        <td>Company</td>
        <td>Columbia</td>
      </tr>
    </table>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th>Name</th>
        <th>Value</th>
      </tr>
      <tr>
        <td>Title</td>
        <td>Casablanca</td>
      </tr>
      <tr>
        <td>Director</td>
        <td>Michael Curtiz</td>
      </tr>
      <tr>
        <td>Genre</td>
        <td>Drama</td>
      </tr>
    </table>
  </body>
</html>

实现方案XSLT

以下XSLT可以实现动态转换,无需硬编码字段:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <html>
      <body>
        <!-- 动态获取页面标题 -->
        <h2><xsl:value-of select="DataObjects/ObjectSelect/meNm"/></h2>
        <!-- 遍历每个DataInstance,生成独立表格 -->
        <xsl:for-each select="DataObjects/DataInstances/DataInstance">
          <table border="1">
            <tr bgcolor="#9acd32">
              <th>Name</th>
              <th>Value</th>
            </tr>
            <!-- 遍历当前实例下的所有field元素 -->
            <xsl:for-each select="field">
              <tr>
                <!-- 提取field的name属性并将首字母大写 -->
                <td>
                  <xsl:value-of select="concat(translate(substring(@name,1,1),'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ'), substring(@name,2))"/>
                </td>
                <!-- 提取field的文本内容 -->
                <td><xsl:value-of select="."/></td>
              </tr>
            </xsl:for-each>
          </table>
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

关键说明

  • 动态遍历实例:通过xsl:for-each遍历每个DataInstance,自动为每条数据生成独立表格
  • 动态提取字段名:使用@name获取field的属性值,通过字符串处理实现首字母大写,匹配期望的输出格式
  • 动态提取字段值:使用.直接获取field元素的文本内容
  • 自适应标题:从ObjectSelect/meNm自动读取页面标题,无需硬编码

内容的提问来源于stack exchange,提问作者Danny Z

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:25:17