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 】
相关推荐:
Firefox Developer Edition开发者版本入口
如何解决hover在ie6中的兼容性问题
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
如何用AI帮你把自己的生活经历写成一个有趣的故事?
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
如何做网站制作流程,*游戏网站怎么搭建?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
php json中文编码为null的解决办法
如何在不使用负向后查找的情况下匹配特定条件前的换行符
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
Angular 表单中正确绑定输入值以确保提交与验证正常工作
北京的网站制作公司有哪些,哪个视频网站最好?
Android自定义listview布局实现上拉加载下拉刷新功能
如何实现建站之星域名转发设置?
如何自定义建站之星网站的导航菜单样式?
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
Python3.6正式版新特性预览
Linux网络带宽限制_tc配置实践解析【教程】
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
详解Huffman编码算法之Java实现
Bootstrap整体框架之JavaScript插件架构
如何为不同团队 ID 动态生成多个“认领值班”按钮
在Oracle关闭情况下如何修改spfile的参数
Internet Explorer官网直接进入 IE浏览器在线体验版网址
用yum安装MySQLdb模块的步骤方法
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
如何在企业微信快速生成手机电脑官网?
如何在建站主机中优化服务器配置?
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
linux top下的 minerd 木马清除方法
Laravel怎么在Blade中安全地输出原始HTML内容
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
如何在服务器上三步完成建站并提升流量?
浅谈redis在项目中的应用
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
三星、SK海力士获美批准:可向中国出口芯片制造设备
怎样使用JSON进行数据交换_它有什么限制
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
Python函数文档自动校验_规范解析【教程】
如何在宝塔面板中修改默认建站目录?

