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

如何修复xsltproc生成的</result>闭合标签对齐问题?

XSLT输出缩进问题:<result>闭合标签未与起始标签对齐

问题现象

使用xsltproc转换XML时,生成的<result>闭合标签缩进异常,无法与起始标签对齐,示例输出如下:

<result>
      <channel>netgroup_home_hosts</channel>
      <value>0.006</value>
      <!--thresholds start--><LimitMaxWarning>1</LimitMaxWarning><LimitMaxError>2</LimitMaxError><!--thresholds end-->
      <!--range: min="0"-->
    </result>

预期<result>闭合标签应与起始标签保持相同缩进级别。

问题原因

核心原因是XSLT默认模板的文本节点处理行为:当未显式定义文本节点模板时,默认模板会复制输入XML中的所有文本节点,包括那些用于格式化的空白字符节点。这些多余的空白被保留到输出后,打乱了正常的缩进结构,导致闭合标签位置偏移。

解决方案

1. 过滤空白文本节点

添加匹配文本节点的模板,仅保留非空白的文本内容,过滤掉无用的空白节点:

<xsl:template match="text()">
  <xsl:if test="normalize-space(.) != ''">
    <xsl:value-of select="."/>
  </xsl:if>
</xsl:template>

2. 全局控制空白节点

使用<xsl:strip-space>剥离所有元素的空白节点,若有需要保留空白的元素,用<xsl:preserve-space>单独指定:

<!-- 剥离所有元素的空白节点 -->
<xsl:strip-space elements="*"/>
<!-- 保留指定元素内的文本空白(按需调整) -->
<xsl:preserve-space elements="channel value"/>

3. 显式覆盖所有节点模板

确保XSLT中对所有需要处理的节点(如根节点、<result>及其子元素)都定义了显式模板,避免触发默认模板自动处理空白文本节点。

内容的提问来源于stack exchange,提问作者U. Windl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 12:35:00