2010-06-11 15 views
5

He definido una clase de Java, pero solo necesito mostrar algunos de los campos de esta clase en un XML. El tipo devuelto debe ser una Cadena. Primero opté por la forma más fácil usando un StringBuffer. Sin embargo, cuando traté de procesar la representación de Cadena de salida, falló. Creo que es más probable porque hay algunos caracteres que no están codificados en el UTF-8 en la entrada. ¿Podría alguien decirme cuál es la mejor manera de manejar esto? Gracias.Cómo generar XML (en representación de cadena) en java

Respuesta

9

Dale XStream intentarlo.

Cita:

Vamos a crear una instancia de la persona y pueblan sus campos:

Person joe = new Person("Joe", "Walnes"); 
joe.setPhone(new PhoneNumber(123, "1234-456")); 
joe.setFax(new PhoneNumber(123, "9999-999")); 

Ahora, para convertirlo en XML, todo lo que tiene que hacer es hacer una llamada simple a XStream:

String xml = xstream.toXML(joe) 

El XML resultante se parece a esto:

<person> 
    <firstname>Joe</firstname> 
    <lastname>Walnes</lastname> 
    <phone> 
    <code>123</code> 
    <number>1234-456</number> 
    </phone> 
    <fax> 
    <code>123</code> 
    <number>9999-999</number> 
    </fax> 
    </person> 

Es así de simple. Mira qué limpio está el XML.

+0

Oh, mi. Nunca había visto esto antes, pero es genial como el infierno. Estoy marcando esto. Muy agradable. – BlairHippo

+0

Es una biblioteca genial, ¡gracias! – yahya

1

Puede usar Java Architecture for XML Binding (o simplemente JAXB) - con las anotaciones debe ser extremadamente fácil y elegante.

En el caso más simple, todo lo que tiene que hacer, es simplemente añadir anotaciones @XmlRootElement al bean desea realizar una serie en XML

@XmlRootElement 
class Foo{ 
.. 
} 

y Marshall el grano en una cadena con formato

StringWriter writer = new StringWriter(); 
JAXBContext context = JAXBContext.newInstance(Foo.class); 
Marshaller m = context.createMarshaller(); 
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); 
m.marshal(individual, writer); 

By default, la Marshaller utilizará codificación UTF-8 al generar datos XML a un java.io.OutputStream, o una java.io.Writer.

2

soy parcial a XOM mí mismo, pero hay un montón de buenas herramientas XML de terceros para Java por ahí. Las cosas importantes a tener en cuenta son que 1) su propio XML con String o StringBuffer o similar para liar es el tipo de cosas que siempre vuelve a morder y 2) de utilidades integradas XML son más de la ingeniería y no en Java todo agradable para trabajar. (Aunque siguen siendo una mejora sobre la construcción manual de la cadena XML). Tomar un buen paquete de terceros es el camino a seguir.

Cuestiones relacionadas