Java的Transformer怎么设置输出属性(indent, encoding)
发布时间 - 2026-01-29 00:00:00 点击率:次Java Transformer需通过setOutputProperties设置indent和encoding:启用缩进需设OutputKeys.INDENT为"yes"并可选配Xalan扩展indent-amount;编码由OutputKeys.ENCODING控制,须与输出目标匹配,如StreamResult+OutputStream生效,StringWriter则忽略。
Java 中的 Transformer(来自 javax.xml.transform)本身不直接提供 indent 或 encoding 属性的 setter 方法,这些设置需通过 OutputKeys 写入 transformer.setOutputProperties() 来控制。
设置缩进(indent)
启用缩进需要两步:开启缩进功能 + 指定缩进数量(可选)。注意:仅对支持格式化输出的 Result 类型(如 StreamResult 配合 OutputStream 或 Writer)生效,且底层 XSLT 处理器(如 Xalan)需支持。
- 设置
OutputKeys.INDENT为"yes" - 可选:用
"{http://xml.apache.org/xslt}indent-amount"设置缩进空格数(Xalan 扩展,非标准但常用)
示例:
transformer.setOutputProperties(Map.of(
OutputKeys.INDENT, "yes",
"{http://xml.apache.org/xslt}indent-amount", "2"
));
设置编码(encoding)
编码由 OutputKeys.ENCODING 控制,它影响输出字节流的字符编码和 XML 声明中的 encoding 属性值。
- 必须与实际写入目标匹配:若用
StreamResult包装FileOutputStream,编码会用于字节转换;若包装StringWriter,该设置会被忽略(Writer 已确定编码) - 常见值:
"UTF-8"、"GBK"、"ISO-8859-1"
示例:
Properties props = new Properties(); props.setProperty(OutputKeys.ENCODING, "UTF-8"); props.setProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperties(props);
注意事项和常见问题
这些设置不是万能的,实际效果受多个因素影响:
- 缩进在默认
TransformerFactory(JDK 自带 Xalan)下通常有效;换成其他实现(如 Saxon)需查其文档,语法可能不同 - 若输入是 DOMSource 且节点已含空白文本,缩进可能被保留或干扰,建议先调用
document.normalizeDocument()或预处理 - 编码设置不会自动改变
OutputStream的行为——你仍需确保用对应编码打开文件(如Files.newOutputStream(path, StandardOpenOption.CREATE)不指定编码,应配合OutputStreamWriter显式指定)
完整小例子(带缩进和 UTF-8)
生成格式化、UTF-8 编码的 XML 字符串:
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
transformer.setOutputProperties(Map.of(
OutputKeys.METHOD, "xml",
OutputKeys.ENCODING, "UTF-8",
OutputKeys.INDENT, "yes",
"{http://xml.apache.org/xslt}indent-amount", "4"
));
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(document), new StreamResult(writer));
String xml = writer.toString(); // 此时含缩进和 UTF-8 声明
基本上就这些。关键记住:属性靠 setOutputProperties 设,不

# java
# apache
# 处理器
# 编码
# 字节
# win
# stream
# 常见问题
# 格式化输出
# xml
# 字符串
# transform
# transformer
# http
# 可选
# 多个
# 并可
# 自带
# 两步
# 仍需
# 不直接
# 非标准
# 仅对
# 不是万能
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Android使用GridView实现日历的简单功能
如何彻底卸载建站之星软件?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
如何在景安云服务器上绑定域名并配置虚拟主机?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
如何快速配置高效服务器建站软件?
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
利用vue写todolist单页应用
在Oracle关闭情况下如何修改spfile的参数
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
如何用VPS主机快速搭建个人网站?
如何快速搭建高效WAP手机网站吸引移动用户?
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
详解阿里云nginx服务器多站点的配置
Android okhttputils现在进度显示实例代码
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
javascript读取文本节点方法小结
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
高防服务器租用首荐平台,企业级优惠套餐快速部署
,南京靠谱的征婚网站?
linux写shell需要注意的问题(必看)
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
制作企业网站建设方案,怎样建设一个公司网站?
javascript中闭包概念与用法深入理解
青岛网站建设如何选择本地服务器?
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
再谈Python中的字符串与字符编码(推荐)
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
Android自定义控件实现温度旋转按钮效果
Swift中循环语句中的转移语句 break 和 continue
网站建设保证美观性,需要考虑的几点问题!
JavaScript Ajax实现异步通信
高性价比服务器租赁——企业级配置与24小时运维服务
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
新三国志曹操传主线渭水交兵攻略
如何快速生成凡客建站的专业级图册?
无锡营销型网站制作公司,无锡网选车牌流程?
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
黑客入侵网站服务器的常见手法有哪些?
简历在线制作网站免费版,如何创建个人简历?
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
如何挑选最适合建站的高性能VPS主机?
中国移动官方网站首页入口 中国移动官网网页登录
详解CentOS6.5 安装 MySQL5.1.71的方法

