JDK8默认Transformer对br空元素XML输出格式变更合规性咨询
核心结论
你的理解存在两处偏差,<br/>是完全合规的XML格式,不存在违反规范的问题:
- 你记错了空白字符的要求位置:XML规范中空元素标签的语法规则明确,可选的空白字符只能出现在斜杠的左侧(也就是标签名/最后一个属性与斜杠之间),斜杠和右侧的闭合大于号之间不允许出现任何字符——如果真的在
/和>之间加空格,反而会生成不合法的XML。 - 斜杠左侧的空白字符是可选而非强制要求,也就是说
<br/>和<br />两种写法都是规范明确认可的合法空元素写法,所有符合标准的XML解析器对两种写法的处理语义完全一致,没有任何区别。
JDK版本行为变更说明
- JDK 8 u292输出无空格的
<br/>、u332输出带空格的<br />,纯粹是内置XML序列化器的输出风格调整,不属于合规性修复,两种输出都是完全合法的XML。 - 这个调整本质是兼容性优化:带空格的空元素写法可以被上世纪90年代的部分老旧HTML4兼容解析器正确识别,不会把标签名误判为
br/,属于面向极端老旧场景的兼容策略调整,不涉及XML规范符合性的变化。 - 注意:如果你的业务代码是通过字符串硬匹配的方式识别空标签,这个序列化风格变化确实可能导致逻辑异常,但这种依赖XML序列化字符串细节的写法本身就不符合XML处理的最佳实践,正规处理应当通过XML解析器读取DOM结构完成判断,不要依赖序列化输出的无意义空白差异。
内容的提问来源于stack exchange,提问作者mjn
相关产品推荐
相关产品推荐

