XML文件转字符串String Java将Document对象转为字符串

3次阅读

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

XML文件转字符串String Java将Document对象转为字符串

如果您已通过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处理。

text=ZqhQzanResources