Java的TransformerFactory怎么设置缩进
发布时间 - 2025-12-30 00:00:00 点击率:次Java中缩进需在Transformer实例上设置OutputKeys.INDENT为"yes"及Apache扩展属性"{http://xml.apache.org/xslt}indent-amount"指定空格数,而非TransformerFactory;不同JDK实现支持该扩展,但DOMSource可能因空白节点干扰缩进效果。
Java 的 TransformerFactory 本身不直接提供缩进设置,缩进控制是在创建 Transformer 后,通过设置输出属性(OutputKeys)来实现的,关键在于启用缩进并指定缩进大小。
启用缩进输出
默认情况下,XSLT 或 DOM 转换生成的 XML 是无格式(无换行、无缩进)的。要开启缩进,需在 Transformer 实例上调用 setOutputProperty 设置以下两个属性:
-
OutputKeys.INDENT设为"yes" -
"{http://xml.apache.org/xslt}indent-amount"(Apache Xalan 扩展属性)设为缩进空格数,如"2"
注意 Transformer 实现差异
不同 JAXP 实现对缩进的支持程度不同:
- Oracle JDK 自带的
com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl支持indent-amount - 较新版本(如 JDK 17+)默认可能切换为
jdk.xml.transform.TransformerFactoryImpl,它也支持该扩展属性,但需确保未禁用扩展功能 - 若使用外部 Xalan(如 xalan.jar),需显式设置系统属性:
System.setProperty("javax.xml.transform.TransformerFactory", "org.apache.xalan.processor.TransformerFactoryImpl");
完整示例代码
以下是一个启用 4 空格缩进的典型写法:
TransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); // 接着用 transformer.transform(...) 执行转换
DOM Source 场景下的注意事项
如果输入是 DOMSource(比如从 Document 构建),部分 JDK 版本可能忽略缩进设置,尤其当 Document 中已有文本节点(如换行符)干扰了格式化逻辑。建议:
- 转换前清理空白文本节点(调用
Document.normalizeDocument()) - 或改用
StreamSource+ 字符串/文件输入,避免 DOM 解析带来的格式干扰 - 确认
transformer确实被用于输出(不是只做 XSLT 处理而未实际序列化)
不复杂但容易忽略的是:缩进属性必须在 transformer 上设置,而不是 factory;且 indent-amount 是扩展属性,不是标准 JAXP 属性,不能用 OutputKeys 常量代替。
# oracle
# java
# apache
# win
# stream
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
微信小程序 HTTPS报错整理常见问题及解决方案
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
新三国志曹操传主线渭水交兵攻略
如何快速上传建站程序避免常见错误?
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
,怎么在广州志愿者网站注册?
敲碗10年!Mac系列传将迎来「触控与联网」双革新
Android 常见的图片加载框架详细介绍
如何在云服务器上快速搭建个人网站?
WEB开发之注册页面验证码倒计时代码的实现
javascript中对象的定义、使用以及对象和原型链操作小结
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
网站制作企业,网站的banner和导航栏是指什么?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
b2c电商网站制作流程,b2c水平综合的电商平台?
Laravel如何配置任务调度?(Cron Job示例)
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
Python数据仓库与ETL构建实战_Airflow调度流程详解
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
如何在万网利用已有域名快速建站?
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
如何在万网开始建站?分步指南解析
JS经典正则表达式笔试题汇总
Android中AutoCompleteTextView自动提示
linux top下的 minerd 木马清除方法
如何挑选高效建站主机与优质域名?
EditPlus中的正则表达式 实战(2)
Laravel如何创建自定义Artisan命令?(代码示例)
网站制作软件免费下载安装,有哪些免费下载的软件网站?
Laravel如何使用模型观察者?(Observer代码示例)
高防服务器租用如何选择配置与防御等级?
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
Laravel如何实现API版本控制_Laravel版本化API设计方案
nodejs redis 发布订阅机制封装实现方法及实例代码
Firefox Developer Edition开发者版本入口
百度浏览器如何管理插件 百度浏览器插件管理方法
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
魔毅自助建站系统:模板定制与SEO优化一键生成指南
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
php485函数参数是什么意思_php485各参数详细说明【介绍】
制作电商网页,电商供应链怎么做?
如何做网站制作流程,*游戏网站怎么搭建?


Property("{http://xml.apache.org/xslt}indent-amount", "4");
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
// 接着用 transformer.transform(...) 执行转换