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

XSLT转换后输出仅显示第一页、SVG图表被截断问题求助

问题根因

你代码中硬编码了SVG的固定高度为900px,同时viewBox属性也限制了可视区域高度为900,SVG默认会裁剪超出可视区域的内容。你统计的欧洲国家有几十个,每个国家的三条GDP柱状图需要占用$bar-height + $bar-spacing = 70px的垂直空间,所有国家渲染完成后总高度远超过900px,因此底部内容被截断。

修复方案

1. 动态计算SVG总高度

先统计欧洲国家总数,根据国家数量动态计算需要的SVG高度,替换原硬编码的svg-height变量:

<!-- 先统计欧洲国家总数 -->
<xsl:variable name="european-country-count" select="count(/mondial/country[encompassed/@continent='europe'])"/>
<xsl:variable name="svg-width" select="1200"/>
<!-- 总高度=国家数*单国占用高度 + 顶部偏移100px + 底部预留50px余量 -->
<xsl:variable name="svg-height" select="$european-country-count * ($bar-height + $bar-spacing) + 150"/>

2. 清理冗余代码

你在全局作用域定义的bar-width1/2/3、gdp_agri/ind/serv变量属于无效代码,全局上下文下无法获取每个国家的字段值,直接删除即可。

3. 修复重复ID问题

你当前每个国家的三个<g>标签都使用了同一个id="bar_{position()}",不符合HTML规范,建议修改为区分后缀:

<g id="bar_agri_{position()}">...</g>
<g id="bar_ind_{position()}">...</g>
<g id="bar_serv_{position()}">...</g>

4. PDF打印适配(可选)

如果需要导出PDF不截断单个国家的内容,可以在HTML的<head>中添加打印样式:

<html>
  <head>
    <style type="text/css">
      @page { size: A4 portrait; margin: 2cm; }
      g { page-break-inside: avoid; }
    </style>
  </head>
  <body>
    <!-- 原有SVG代码 -->
  </body>
</html>

问题复现截图

从图中可见存在更多国家数据,但ExistDB中的完整XML输出可正常展示,HTML输出却无法显示后续内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:18:02