如何在java中生成XML(在String表示中)

我已经定义了一个java类,但只需要将这个类的一些字段输出到XML中。 返回的类型必须是String。 我首先选择了使用StringBuffer的最简单方法。 但是,当我尝试处理输出字符串表示时,它失败了。 我认为这很可能是因为有些字符在输入中没有在UTF-8中编码。 有人能告诉我处理这个问题的最佳方法是什么? 谢谢。

尝试一下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如下所示:

  Joe Walnes  123 1234-456   123 9999-999   

就这么简单。 看看XML是多么干净。

我自己偏爱XOM ,但是有很多很好的第三方XML工具可供Java使用。 需要记住的重要事项是:1)使用StringStringBuffer等手动滚动您自己的XML是一种总会让您感到困惑的事情; 2)Java的内置XML实用程序过度设计而不是一切都很愉快。 (虽然它们仍然比手动构建XML字符串有所改进。)抓住一个好的第三方软件包是可行的方法。

您可以使用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); 

默认情况下 ,Marshaller在向java.io.OutputStream或java.io.Writer生成XML数据时将使用UTF-8编码。