java

2010-06-11 17 views
5

'da XML (dize olarak gösteriliyor) nasıl oluşturulur Bir java sınıfı tanımladım, ancak bu sınıfın bazı alanlarını yalnızca bir XML'e vermek gerekiyor. Döndürülen tür bir Dize olmalıdır. İlk olarak StringBuffer'ı kullanmanın en kolay yolunu seçtim. Ancak, çıktı dizisi temsilini işlemeye çalıştığımda, başarısız oldu. Bunun çoğunlukla olası olduğunu düşünüyorum çünkü girdide UTF-8'de kodlanmamış bazı karakterler var. Birisi bana bunun en iyi yolunun ne olduğunu söyleyebilir mi? Teşekkürler.java

cevap

9

XStream bir deneyin.

Alıntı:

en Kişinin bir örneğini oluşturalım ve doldurmak onun alanlar:

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

, bütün zorunda XML dönüştürmek yapmak XStream'e basit bir çağrı yapmaktır:

String xml = xstream.toXML(joe) 

sonuç XML şöyle görünür:

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

kadar basit. XML'in ne kadar temiz olduğuna bakın.

+0

Oh, benim. Bunu daha önce hiç görmedim, ama cehennem kadar havalı. Ben bunu işaretliyorum. Çok hoş. – BlairHippo

+0

Gerçekten harika bir kütüphane, teşekkürler! – yahya

1

Java Architecture for XML Binding (ya da sadece JAXB) kullanabilirsiniz - ek açıklamalarla son derece kolay ve zarif olmalıdır. En basit şekilde

, yapmanız gereken tek şey, sadece biçimlendirilmiş bir dize

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); 
içine XML

@XmlRootElement 
class Foo{ 
.. 
} 

ve Marshall fasulye seri hale getirmek istediğiniz fasulye için @XmlRootElement ek açıklama eklemek olduğunu

By default, Marshaller bir java.io.OutputStream veya bir java.io.Writer için XML verileri oluştururken UTF-8 kodlamasını kullanacaktır.

2

Kendim için XOM kısmi yapıyorum, ancak orada Java için çok iyi üçüncü taraf XML araçları var. Unutulmaması gereken önemli noktalar şunlardır: 1) kendi XML'inizi String veya StringBuffer ile elle yuvarlama veya benzeri şey, sizi ısırmak için her zaman geri dönen bir şeydir ve 2) Java'nın yerleşik XML yardımcı programları fazla mühendisliğe sahip değildir. Çalışmak için tüm hoş. (XML dizgisini manuel olarak oluşturma konusunda hala bir gelişme olsalar da.) İyi bir üçüncü taraf paketini kapmak yoldur.