Java JAXB将任意文本写入流生成的XML文件的第一行
我使用JAXB封送对象,当前我的控制台输出与生成的XML文件不同: 控制台:Java JAXB将任意文本写入流生成的XML文件的第一行,java,xml,jaxb,marshalling,Java,Xml,Jaxb,Marshalling,我使用JAXB封送对象,当前我的控制台输出与生成的XML文件不同: 控制台: <!-- My awesome comment --> <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Cat> <name>Toby</name> </Cat> Cat=new Cat(); 类别setName(“托比”); JAXBContext context=
<!-- My awesome comment -->
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Cat>
<name>Toby</name>
</Cat>
Cat=new Cat();
类别setName(“托比”);
JAXBContext context=JAXBContext.newInstance(Cat.class);
Marshaller m=context.createMarshaller();
m、 setProperty(Marshaller.JAXB_格式的_输出,Boolean.TRUE);
m、 setProperty(Marshaller.JAXB_片段,Boolean.FALSE);
m、 元帅(cat、System.out);
Writer w=null;
尝试
{
w=新文件编写器(“Cat.xml”);
w、 附加(“”);
w、 冲洗();
m、 元帅(cat,w);
}
最后
{
尝试
{
w、 close();
}
捕获(例外e)
{
}
}
看看这篇文章:
这并不完全是你所需要的,但可能是更好的方法 请举例说明完整性。特别是因为没有可用的默认构造函数。@Woot4Moo如果它适用于控制台,那么它也应该适用于文件。唯一的区别是您已经使用过一次封送员。所以使用context.createMarshaller();第二次写入文件之前。无论如何,对我来说,使用特定于太阳的属性似乎不是一个好主意。为什么不将JAXB_片段保留为false,直接向filewriter写出注释呢?因为JAXB公开了一种方法。同时删除对system.out的调用也无法解决此问题。
<Cat>
<name>Toby</name>
</Cat>
public class CatDriver{
public static void main(String[] args) throws JAXBException, IOException,
ParserConfigurationException, TransformerException {
Cat cat = new Cat();
cat.setName("Toby");
JAXBContext context = JAXBContext.newInstance(Cat.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.setProperty(
"com.sun.xml.bind.xmlHeaders",
"<!-- My awesome comment"
+ " --> \n <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>");
m.marshal(cat, System.out);
Writer w = null;
try {
w = new FileWriter("C:/test/Cat.xml");
m.marshal(cat, w);
} finally {
try {
w.close();
} catch (Exception e) {
}
}
}
}
@XmlRootElement(name = "Cat")
class Cat {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Cat cat = new Cat();
cat.setName( "Toby" );
JAXBContext context = JAXBContext.newInstance( Cat.class );
Marshaller m = context.createMarshaller();
m.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE );
m.setProperty( Marshaller.JAXB_FRAGMENT, Boolean.FALSE );
m.marshal( cat, System.out );
Writer w = null;
try
{
w = new FileWriter( "Cat.xml" );
w.append( "<!-- My awesome comment -->" );
w.flush();
m.marshal( cat, w );
}
finally
{
try
{
w.close();
}
catch ( Exception e )
{
}
}