Java如何将XML节点转换为字符串
发布时间 - 2026-01-11 00:00:00 点击率:次Java中将XML节点转字符串最常用可靠的方式是使用JAXP的Transformer类配合DOMSource和StreamResult,能准确保留结构、命名空间、属性和文本内容,适用于Element、Document、Text等任意Node子类型。
Java中将XML节点转换为字符串,最常用且可靠的方式是使用JAXP(Java API for XML Processing)中的Transformer类,配合DOMSource和StreamResult实现。这种方式能准确保留节点结构、命名空间、属性和文本内容,避免手动拼接带来的格式或转义问题。
使用Transformer将Node转为字符串
这是标准推荐做法,适用于Element、Document、Text等任意Node子类型:
- 创建
TransformerFactory实例,获取Transformer - 设置输出属性(如缩进、编码、省略XML声明等)
- 用
DOMSource包装目标节点,用StreamResult接收字符串输出 - 调用
transform()执行转换
示例代码:
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Node;
import java.io.StringWriter;
public static String nodeToString(Node node) throws TransformerException {
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.setOutputProperty(OutputKeys.INDENT, "no"); // 如需缩进可设为"yes"
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(node), new StreamResult(writer));
return writer.toString().trim();
}
处理特殊节点:Document与Element的区别
Document节点转换时默认会包含整个XML文档结构;而只传入Element则仅输出该元素及其子树。若不希望输出根Document的DOCTYPE或XML声明,确保设置OMIT_XML_DECLARATION="yes",并确认传入的是具体元素节点而非整个文档对象。
立即学习“Java免费学习笔记(深入)”;
注意:node.getNodeType() == Node.ELEMENT_NODE时结果为标准XML片段;若为Node.TEXT_NODE,则返回其原始文本内容(不含标签)。
替代方案:使用XPath或序列化工具(谨慎选择)
不建议用node.getTextContent()或node.getNodeValue()代替——它们只提取文本,丢失标签、属性和结构。
第三方库如Jackson XML或JAXB也可实现,但需额外依赖且更适合对象绑定场景;纯节点转字符串,原生Transformer已足够轻量、稳定、无需引入外部包。
常见问题与注意事项
-
中文乱码?确保
StreamResult使用StringWriter(默认UTF-16),或改用ByteArrayOutputStream并指定UTF-8编码 - 换行缩进失效?检查
INDENT是否设为"yes",并添加OutputKeys.INDENT_AMOUNT控制空格数 - 命名空间丢失?确保原始DOM解析时启用了命名空间支持(
Documen)
tBuilderFactory.setNamespaceAware(true) - 空元素被展开?如
变成,这是Transformer默认行为,一般不影响语义
# java
# node
# 编码
# 工具
# 中文乱码
# win
# stream
# 区别
# 常见问题
# java api
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用模型观察者?(Observer代码示例)
jQuery validate插件功能与用法详解
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
详解CentOS6.5 安装 MySQL5.1.71的方法
网站制作价目表怎么做,珍爱网婚介费用多少?
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
创业网站制作流程,创业网站可靠吗?
电商网站制作价格怎么算,网上拍卖流程以及规则?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
如何用低价快速搭建高质量网站?
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
如何选择PHP开源工具快速搭建网站?
如何在云指建站中生成FTP站点?
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
Laravel如何处理CORS跨域请求?(配置示例)
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
JavaScript中的标签模板是什么_它如何扩展字符串功能
java中使用zxing批量生成二维码立牌
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
Laravel如何创建自定义Artisan命令?(代码示例)
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
如何选择可靠的免备案建站服务器?
公司门户网站制作流程,华为官网怎么做?
Linux安全能力提升路径_长期防护思维说明【指导】
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
Android仿QQ列表左滑删除操作
企业网站制作这些问题要关注
高性价比服务器租赁——企业级配置与24小时运维服务
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
使用Dockerfile构建java web环境
米侠浏览器网页背景异常怎么办 米侠显示修复
如何为不同团队 ID 动态生成多个非值班状态按钮
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
教你用AI润色文章,让你的文字表达更专业
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
浅谈javascript alert和confirm的美化
如何在万网ECS上快速搭建专属网站?
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?


tBuilderFactory.setNamespaceAware(true)