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

XSLT解析HTML表格:仅选tbody下顶级tr生成标签页

解决XSLT标签页生成错误及部署问题

一、修正标签页与卡片的选择逻辑

你的核心问题是未明确区分**<tbody>的直接子<tr>(顶级标签行)和顶级<tr>内部的嵌套<tr>(卡片行)**,导致所有<tr>都被识别为标签页。通过精准的节点路径选择即可修复:

1. 生成标签页导航(仅选顶级<tr>)

使用tbody/tr选择<tbody>的直接子元素<tr>(即带heading类的顶级行),避免使用//tr这类全局选择器:

<!-- 标签页导航栏 -->
<div class="tab-navigation">
  <xsl:for-each select="tbody/tr">
    <!-- 用position()生成唯一标签页ID -->
    <button class="tab-item" data-target="tab-<xsl:value-of select='position()'/>">
      <xsl:value-of select="td[@class='heading']"/>
    </button>
  </xsl:for-each>
</div>

2. 生成对应标签页的卡片内容(遍历顶级<tr>内部的嵌套<tr>)

在遍历顶级<tr>的循环内,用tr选择当前顶级<tr>下的直接子<tr>(卡片行):

<!-- 标签页内容容器 -->
<div class="tab-contents">
  <xsl:for-each select="tbody/tr">
    <div class="tab-content" id="tab-<xsl:value-of select='position()'/>">
      <div class="card-container">
        <!-- 遍历当前顶级tr下的所有嵌套tr,生成卡片 -->
        <xsl:for-each select="tr">
          <div class="card">
            <!-- 根据需求处理卡片内的td内容,示例如下 -->
            <xsl:for-each select="td">
              <div class="card-field">
                <xsl:value-of select="."/>
              </div>
            </xsl:for-each>
          </div>
        </xsl:for-each>
      </div>
    </div>
  </xsl:for-each>
</div>

二、部署后异常的排查方案

本地正常但部署后出错,通常是环境差异导致,按以下顺序排查:

  • XSLT版本兼容:本地可能使用了XSLT 2.0/3.0特性(如for-each-group、matches()正则),但服务器仅支持1.0。检查代码,将高版本特性替换为1.0兼容写法,比如用xsl:key分组替代for-each-group。
  • 命名空间问题:如果原XML包含命名空间(如<html:tbody>),本地测试可能忽略了命名空间绑定,但服务器处理器严格要求。在XSLT根元素xsl:stylesheet中添加命名空间声明,比如xmlns:html="http://www.w3.org/1999/xhtml",并在节点选择时加上前缀:html:tbody/html:tr。
  • 节点匹配精度:服务器上的XML可能存在细微差异,比如class属性带空格(class=' heading ')或大小写不一致(Heading)。修改匹配逻辑为normalize-space(td/@class)='heading',或者用translate(td/@class,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='heading'忽略大小写。
  • 处理器差异:本地用Saxon,服务器用libxslt或Xalan,部分语法支持不同。比如libxslt对position()在嵌套循环中的处理、xsl:output的参数可能有差异,需测试目标处理器的兼容性。
  • 编码与权限:检查服务器上XML/XSLT文件的编码是否为UTF-8(在XSLT中添加<xsl:output encoding="UTF-8"/>强制输出编码);同时确认服务器进程有读取这两个文件的权限,文件路径是否正确(避免相对路径导致找不到文件)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:32:43