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

时间:2010-06-11 15:33:49

标签: java xml

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

3 个答案:

答案 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)使用StringStringBuffer等手动滚动您自己的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编码。