如何将Java对象转换为XML字符串?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (198)

我有一个注解Java对象的属性。例如Customer,就像这个例子。我想要一个字符串表示。百度建议使用JAXB。但是在所有的例子中,创建的XML文件都被打印到文件或控制台,如下所示:

File file = new File("C:\\file.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

// output pretty printed
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

jaxbMarshaller.marshal(customer, file);
jaxbMarshaller.marshal(customer, System.out);

但是我必须使用这个对象以XML格式发送。所以我想获得一个代表XML的String。

String xmlString = ...
sendOverNetwork(xmlString);

我怎样才能做到这一点?

提问于
用户回答回答于

你可以使用Marshaler的方法进行编组,将Writer作为参数:

marshal(Object,Writer)

并传递一个可以构建一个String对象的实现

直接已知的子类: BufferedWriter,CharArrayWriter,FilterWriter,OutputStreamWriter,PipedWriter,PrintWriter,StringWriter

调用它的toString方法来获取实际的String值。

这样做:

StringWriter sw = new StringWriter();
jaxbMarshaller.marshal(customer, sw);
String xmlString = sw.toString();
用户回答回答于

你可以使用StringWriter。在这里提供示例代码:

private static String jaxbObjectToXML(Customer customer) {
    String xmlString = "";
    try {
        JAXBContext context = JAXBContext.newInstance(Customer.class);
        Marshaller m = context.createMarshaller();

        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); // To format XML

        StringWriter sw = new StringWriter();
        m.marshal(customer, sw);
        xmlString = sw.toString();

    } catch (JAXBException e) {
        e.printStackTrace();
    }

    return xmlString;
}

扫码关注云+社区

领取腾讯云代金券