我已经定义了一个java类,但只需要将这个类的一些字段输出到XML中。返回的类型必须是String。我首先选择使用StringBuffer的最简单方法。但是,当我尝试处理输出String表示时,它失败了。我认为这很可能是因为有些字符在输入中没有在UTF-8中编码。有人能告诉我处理这个问题的最佳方法是什么?感谢。
答案 0 :(得分:9)
尝试XStream。
<强>引用:强>
让我们创建一个Person和的实例 填充其字段:
Person joe = new Person("Joe", "Walnes");
joe.setPhone(new PhoneNumber(123, "1234-456"));
joe.setFax(new PhoneNumber(123, "9999-999"));
现在,将其转换为 XML,你所要做的就是做一个 简单调用XStream:
String xml = xstream.toXML(joe)
生成的XML如下所示:
<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>
就这么简单。看看XML是多么干净。
答案 1 :(得分:2)
我自己偏爱XOM,但是有很多很好的第三方XML工具可供Java使用。需要记住的重要事项是:1)使用String
或StringBuffer
等手动滚动您自己的XML是一种总会让您感到困惑的事情; 2)Java的内置XML公用设施过度设计,使用起来并不愉快。 (虽然它们仍然比手动构建XML字符串有所改进。)抓住一个好的第三方软件包是可行的方法。
答案 2 :(得分:1)
您可以使用Java Architecture for XML Binding(或简称为JAXB) - 使用注释,它应该非常简单和优雅。
在最简单的情况下,您只需要将@XmlRootElement注释添加到要序列化为XML的bean中
@XmlRootElement
class Foo{
..
}
并将bean编组为格式化字符串
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在向java.io.OutputStream或java.io.Writer生成XML数据时将使用UTF-8编码。