如何统一XSL脚本输出XML的属性行内布局?排查问题成因
XML属性换行问题排查与解决
这个问题既可能来自XSL脚本的输出控制逻辑,也可能是SAXON的默认格式化配置导致,下面分情况拆解:
一、SAXON配置层面的原因
SAXON默认会根据属性数量、总长度自动换行属性,这是它的内置XML格式化策略。要强制所有属性在同一行,只需调整输出参数:
- 直接在Java代码里设置:
把transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty("{http://saxon.sf.net/}indent-spaces", "2"); // 核心参数:取消行长度限制,强制属性不换行 transformer.setOutputProperty("{http://saxon.sf.net/}line-length", "0");line-length设为0,SAXON就不会因为属性太长或数量多自动换行。 - 也可以在XSL脚本的
<xsl:output>标签里配置:<xsl:output method="xml" indent="yes" saxon:line-length="0" xmlns:saxon="http://saxon.sf.net/"/>
二、XSL脚本层面的原因
如果调整配置后问题还存在,就得检查XSL脚本:
- 有没有手动在属性输出时插入换行或空白节点(比如用
<xsl:text>输出换行符); - 是不是用了自定义模板处理属性,没控制好输出格式;
- 动态生成属性的逻辑里,有没有拼接时引入不必要的换行。
排查步骤
- 先调SAXON的
line-length参数为0,验证是否解决; - 若无效,逐行检查XSL脚本中输出节点属性的部分,排查手动换行或格式控制的问题。
内容的提问来源于stack exchange,提问作者Hervé Girod
相关产品推荐
相关产品推荐

