2010-06-11 9 views
5

Ho definito una classe java, ma ho solo bisogno di generare alcuni campi di questa classe in un XML. Il tipo restituito deve essere una stringa. Per prima cosa ho optato per il modo più semplice usando un StringBuffer. Tuttavia, quando ho provato a elaborare la rappresentazione della stringa di output, non è riuscito. Penso che sia più probabile perché ci sono alcuni caratteri che non sono codificati nell'UTF-8 nell'input. Qualcuno potrebbe dirmi qual è il modo migliore per gestirlo? Grazie.Come generare XML (in rappresentazione String) in java

risposta

9

Dai una prova a XStream.

Citazione:

Creiamo un'istanza di Persona e popolano i suoi campi:

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

Ora, per convertirlo in XML, tutto quello che dovete fare è una semplice chiamata a XStream :

String xml = xstream.toXML(joe) 

L'XML risultante è simile al seguente:

<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> 

E 'così semplice. Guarda come è pulito l'XML.

+0

Oh, mio. Non l'ho mai visto prima, ma è bello da morire. Sto tagliando questo. Molto bella. – BlairHippo

+0

È una biblioteca davvero fantastica, grazie! – yahya

1

È possibile utilizzare Java Architecture for XML Binding (o semplicemente JAXB) - con annotazioni dovrebbe essere estremamente facile ed elegante.

Nel caso più semplice, tutto quello che dovete fare, è sufficiente aggiungere @XmlRootElement annotazione il fagiolo che si desidera serializzare in XML

@XmlRootElement 
class Foo{ 
.. 
} 

e Marshall il fagiolo in una stringa formattata

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, Marshaller utilizzerà la codifica UTF-8 durante la generazione di dati XML su java.io.OutputStream o java.io.Writer.

2

Sono parziale a XOM personalmente, ma ci sono molti buoni strumenti XML di terze parti per Java. Le cose importanti da ricordare sono che 1) scorrere a mano il tuo codice XML con String o StringBuffer o simili è il genere di cose che torna sempre a morderti e 2) Le utilità XML integrate di Java sono troppo ingegnerizzate e non tutto piacevole con cui lavorare. (Anche se sono ancora un miglioramento rispetto alla costruzione manuale della stringa XML.) Afferrare un buon pacchetto di terze parti è la strada da percorrere.