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

动态创建fo:table-row时XML解析报错:缺少匹配结束标签

解决XML解析错误:<fo:table-row>必须由匹配的结束标签终止

嘿,这个XML解析报错我太熟了!你碰到的核心问题就是<fo:table-row>标签没有正确完成闭合,XML解析器对标签的完整性要求特别严格,尤其是XSL-FO里的table-row元素,它需要包含子元素(比如table-cell),绝对不能用自闭合写法,也不能出现开始标签和结束标签不配对的情况。

我给你梳理几个最常见的问题点和对应的解决办法:

1. 不要用自闭合的<fo:table-row/>

FO规范里,table-row是容器元素,必须包裹table-cell,不能是空的自闭合标签。很多新手容易犯这个错:
❌ 错误写法:

<fo:table-row/> <!-- 解析器直接报错,因为没有结束标签,且为空 -->

✅ 正确写法:

<fo:table-row>
  <fo:table-cell>
    <fo:block>这里放单元格内容</fo:block>
  </fo:table-cell>
</fo:table-row>

2. 避免条件判断导致的标签不匹配

如果是通过<xsl:if>或<xsl:choose>动态生成行,一定要把整个<fo:table-row>的开始和结束标签放在同一个条件块里,不能拆分:
❌ 错误示例:

<xsl:if test="need-row">
  <fo:table-row> <!-- 开始标签在if里 -->
</xsl:if>
<fo:table-cell>...</fo:table-cell>
</fo:table-row> <!-- 结束标签在if外,导致不匹配 -->

✅ 正确做法:

<xsl:if test="need-row">
  <fo:table-row>
    <fo:table-cell>
      <fo:block>符合条件才生成整行</fo:block>
    </fo:table-cell>
  </fo:table-row>
</xsl:if>

3. 检查循环生成行的逻辑

如果用<xsl:for-each>循环生成多行,要确保循环内部完整包裹每一行的开始和结束标签:

<fo:table-body>
  <xsl:for-each select="your-data-node">
    <fo:table-row>
      <fo:table-cell>
        <fo:block><xsl:value-of select="data-field"/></fo:block>
      </fo:table-cell>
    </fo:table-row>
  </xsl:for-each>
</fo:table-body>

另外,看你贴的代码片段里column-width=...好像没写完,记得<fo:table-column>也要正确闭合(比如column-width="55%"/>),不过这不是当前报错的原因,但也得注意。

如果还是解决不了,建议把完整的table相关XSLT代码贴出来,我可以帮你再排查细节~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:28:41