document转字符串有四种标准方法:一、用transformerfactory+domsource控制缩进编码;二、用dom level 3的lsserializer轻量格式化;三、jaxb适用于有注解java类映射场景;四、第三方库如jackson xml需先转element。

如果您已通过Java DOM API创建或解析了XML文档并获得了Document对象,但需要将其转换为标准格式的字符串表示,则可能是由于缺少序列化步骤或配置不当导致输出异常。以下是将Document对象转为字符串的多种实现方法:
一、使用transformerFactory和DOMSource
该方法利用JAXP内置的XSLT处理器进行序列化,支持缩进、编码和XML声明控制,是官方推荐的标准方式。
1、获取TransformerFactory实例,并创建Transformer对象。
2、设置Transformer的输出属性,例如OutputKeys.INDENT设为”yes”以启用缩进,OutputKeys.ENCODING设为”UTF-8″指定编码。
立即学习“Java免费学习笔记(深入)”;
3、创建DOMSource对象,传入Document作为源节点。
4、创建StringWriter作为输出目标,再包装为StreamResult。
5、调用transform方法执行序列化,最后从StringWriter中获取字符串结果。
二、使用LSSerializer接口(DOM Level 3)
该方法基于W3C DOM Level 3 Load and Save规范,适用于较新版本JDK,无需依赖XSLT引擎,轻量且可控性强。
1、通过Document.getImplementation()获取DOMImplementation对象。
2、调用getFeature(“LS”, “3.0”)获取DOMImplementationLS接口实例。
3、调用createLSSerializer()创建序列化器。
4、设置序列化器的format-pretty-print属性为true以启用格式化输出。
5、调用writeToString()方法直接传入Document对象并返回字符串。
三、使用JAXB(仅适用于有对应Java类映射的场景)
该方法适用于Document由JAXBContext从Java对象 marshal 生成,或需反向还原为原始对象结构的情形,本质是对象与XML双向绑定。
1、确保目标Java类已添加@XmlRootElement等必要注解。
2、创建JAXBContext实例,参数为根元素对应类的class对象。
3、获取Marshaller实例,并设置Marshaller.JAXB_FORMATTED_OUTPUT为true以美化输出。
4、创建StringWriter作为输出目标。
5、调用marshal方法,传入Document对应的Java对象及StringWriter。
四、使用第三方库如apache Commons Text或Jackson XML
该方法适用于项目已引入相关依赖,追求简洁API或特殊格式需求(如去除空白、压缩输出)的场景。
1、若使用commons-text,调用StringEscapeUtils.escapeXml11()对预处理后的字符串做XML实体转义。
2、若使用jackson-dataformat-xml,构建XmlMapper实例,调用writeValueAsString()传入Node对象(需先将Document转换为JsonNode或Element)。
3、注意Jackson默认不直接支持Document类型,需先通过document.getDocumentElement()获取Element,再交由XmlMapper处理。