将Java对象转换为XMLstring

是的,是的,我知道很多关于这个话题的问题。 但我仍然无法find解决我的问题。 我有一个注解Java对象的属性。 例如Customer, 就像这个例子 。 我想要一个string表示。 Googlebuild议为此目的使用JAXB。 但是在所有的例子中,创build的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格式发送networking。 所以我想获得一个代表XML的String。

 String xmlString = ... sendOverNetwork(xmlString); 

我怎样才能做到这一点?

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

元帅(对象,作家)

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

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

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

这样做:

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

由于A4L提到,你可以使用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; } 

一个方便的select是使用javax.xml.bind.JAXB :

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

相反的过程(解组)将是:

 Customer customer = JAXB.unmarshal(new StringReader(xmlString), Customer.class); 

这种方法无需处理检查的exception。

你可以把它StringWriter一个StringWriter并抓住它的string。 从toString()

testing并使用Java代码将Java对象转换为XML:

Customer.java

 import java.util.ArrayList; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Customer { String name; int age; int id; String desc; ArrayList<String> list; public ArrayList<String> getList() { return list; } @XmlElement public void setList(ArrayList<String> list) { this.list = list; } public String getDesc() { return desc; } @XmlElement public void setDesc(String desc) { this.desc = desc; } public String getName() { return name; } @XmlElement public void setName(String name) { this.name = name; } public int getAge() { return age; } @XmlElement public void setAge(int age) { this.age = age; } public int getId() { return id; } @XmlAttribute public void setId(int id) { this.id = id; } } 

createXML.java

 import java.io.StringWriter; import java.util.ArrayList; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; public class createXML { public static void main(String args[]) throws Exception { ArrayList<String> list = new ArrayList<String>(); list.add("1"); list.add("2"); list.add("3"); list.add("4"); Customer c = new Customer(); c.setAge(45); c.setDesc("some desc "); c.setId(23); c.setList(list); c.setName("name"); JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class); Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); StringWriter sw = new StringWriter(); jaxbMarshaller.marshal(c, sw); String xmlString = sw.toString(); System.out.println(xmlString); } } 

在Java中将对象转换为XML

Customer.java

 package com; import java.util.ArrayList; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; /** * * @author ABsiddik */ @XmlRootElement public class Customer { int id; String name; int age; String address; ArrayList<String> mobileNo; public int getId() { return id; } @XmlAttribute public void setId(int id) { this.id = id; } public String getName() { return name; } @XmlElement public void setName(String name) { this.name = name; } public int getAge() { return age; } @XmlElement public void setAge(int age) { this.age = age; } public String getAddress() { return address; } @XmlElement public void setAddress(String address) { this.address = address; } public ArrayList<String> getMobileNo() { return mobileNo; } @XmlElement public void setMobileNo(ArrayList<String> mobileNo) { this.mobileNo = mobileNo; } } 

ConvertObjToXML.java

 package com; import java.io.File; import java.io.StringWriter; import java.util.ArrayList; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; /** * * @author ABsiddik */ public class ConvertObjToXML { public static void main(String args[]) throws Exception { ArrayList<String> numberList = new ArrayList<>(); numberList.add("01942652579"); numberList.add("01762752801"); numberList.add("8800545"); Customer c = new Customer(); c.setId(23); c.setName("Abu Bakar Siddik"); c.setAge(45); c.setAddress("Dhaka, Bangladesh"); c.setMobileNo(numberList); File file = new File("C:\\Users\\NETIZEN-ONE\\Desktop \\customer.xml"); JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class); Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); jaxbMarshaller.marshal(c, file);// this line create customer.xml file in specified path. StringWriter sw = new StringWriter(); jaxbMarshaller.marshal(c, sw); String xmlString = sw.toString(); System.out.println(xmlString); } } 

试试这个例子..

使用ByteArrayOutputStream

 public static String printObjectToXML(final Object object) throws TransformerFactoryConfigurationError, TransformerConfigurationException, SOAPException, TransformerException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); XMLEncoder xmlEncoder = new XMLEncoder(baos); xmlEncoder.writeObject(object); xmlEncoder.close(); String xml = baos.toString(); System.out.println(xml); return xml.toString(); } 
 import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; private String generateXml(Object obj, Class objClass) throws JAXBException { JAXBContext jaxbContext = JAXBContext.newInstance(objClass); Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); StringWriter sw = new StringWriter(); jaxbMarshaller.marshal(obj, sw); return sw.toString(); } 

使用此函数将Object转换为xmlstring(应该称为convertToXml(sourceObject,Object.class);) – >

import javax.xml.bind.JAXBContext;

import javax.xml.bind.JAXBElement;

import javax.xml.bind.JAXBException;

import javax.xml.bind.Marshaller;

import javax.xml.bind.Unmarshaller;

import javax.xml.namespace.QName;

 public static <T> String convertToXml(T source, Class<T> clazz) throws JAXBException { String result; StringWriter sw = new StringWriter(); JAXBContext jaxbContext = JAXBContext.newInstance(clazz); Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); QName qName = new QName(StringUtils.uncapitalize(clazz.getSimpleName())); JAXBElement<T> root = new JAXBElement<T>(qName, clazz, source); jaxbMarshaller.marshal(root, sw); result = sw.toString(); return result; } 

使用此函数将xmlstring转换为Object返回 – >(应该被称为createObjectFromXmlString(xmlString,Object.class))

public static T createObjectFromXmlString(String xml,Class clazz)引发JAXBException,IOException {

  T value = null; StringReader reader = new StringReader(xml); JAXBContext jaxbContext = JAXBContext.newInstance(clazz); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); JAXBElement<T> rootElement=jaxbUnmarshaller.unmarshal(new StreamSource(reader),clazz); value = rootElement.getValue(); return value; }