1. 引言

XML(可扩展标记语言) 是信息结构化最流行的架构之一。在Java中,通常使用诸如DOM(文档对象模型)SAX(简单XML接口)等技术来解析和操作XML文档。

在某些情况下,可能需要将XML文档对象转换为其字符串形式,以便存储在数据库中或在网络上传输。

本教程将讨论几种在Java中将XML文档对象转换为字符串的方法。

2. 示例

假设我们有一个Document对象:

Document document = // ...

这个Document对象代表内存中的XML内容:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
    <child1>This is child element 1</child1>
    <child2>This is child element 2</child2>
</root>

现在,我们需要将这个XML文档对象转换为Java字符串。

3. 使用XML变换API

Java的javax.xml.transform包包含进行XML变换的类和接口。它的一个功能是将XML文档对象转换为字符串表示形式。以下代码演示了如何使用javax.xml.transform包将此XML文档对象解析为Java字符串:

@Test
public void givenXMLDocument_whenUsingTransformer_thenConvertXMLToString()
throws TransformerException {  
    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    StringWriter stringWriter = new StringWriter();
    transformer.transform(new DOMSource(document), new StreamResult(stringWriter));
    String result = stringWriter.toString();

    assertTrue(result.contains("<root>"));
    assertTrue(result.contains("This is child element 1"));
    assertTrue(result.contains("This is child element 2"));
}

首先,我们实例化一个TransformerFactory和一个Transformer,用于XML变换。然后,我们创建一个StringWriter来存储转换后的XML文本形式。接着,*transform()方法会改变XML文档,并可以使用stringWrite.toString()*方法将结果保存到字符串result中。

4. 使用Java XMLBeans

在Java的XML处理世界中,使用XMLBeans方法将XML文档和字符串之间的转换既简单又灵活。我们可以使用XmlObject.Factory.parse(document)将XML文档解析为XmlObject,以便进行后续的操作:

@Test
public void givenXMLDocument_whenUsingXmlBeans_thenConvertXMLToString() {
    try {
        XmlObject xmlObject = XmlObject.Factory.parse(document);

        XmlOptions options = new XmlOptions();
        options.setSavePrettyPrint();
        options.setUseDefaultNamespace();
        options.setSaveAggressiveNamespaces();

        String xmlString = xmlObject.xmlText(options);

        xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + xmlString;

        assertTrue(xmlString.contains("<root>"));
        assertTrue(xmlString.contains("This is child element 1"));
        assertTrue(xmlString.contains("This is child element 2"));
    } catch (XmlException e) {
        e.printStackTrace();
    }
}

在这个测试方法中,我们使用XmlOptions解析文档为XmlObject,以自定义输出格式,如美化、命名空间等。此外,还进行了断言,以确保生成的XML字符串包含XML声明以及特定的XML元素和元素内容。

5. 总结

本教程讨论了如何在Java中将XML文档对象转换为字符串。

如往常一样,本文的完整代码示例可在GitHub上找到。