你知道JAXB设置,以防止独立=“是”从生成的XML生成?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", Boolean.FALSE);
可用于无
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
不过,我难道不认为这是最好的做法。
我没有足够高的“信誉”有“特权”发表评论。 ;-)
@Debasis,请注意,您所指定的属性:
"com.sun.xml.internal.bind.xmlHeaders"
应该:
"com.sun.xml.bind.xmlHeaders" (without the "internal", which are not meant to be used by the public)
如果我用的是“内部”属性像你一样,我得到一个javax.xml.bind.PropertyException
你试一试
private String marshaling2(Object object) throws JAXBException, XMLStreamException {
JAXBContext jaxbContext = JAXBContext.newInstance(object.getClass());
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
StringWriter writer = new StringWriter();
writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
jaxbMarshaller.marshal(object, writer);
return writer.toString();
}
在JAXB是JDK1.6的一部分
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
您可以使用
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
要么
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", Boolean.FALSE)
禁用默认XML声明,然后添加您的自定义XML声明,
<?xml version="1.0" encoding="UTF-8"?>
通过
marshaller.setProperty("com.sun.xml.bind.xmlHeaders",
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
于所生成的XML,从而避免了独立=“是”属性。
只是如果有人仍然与这个问题所困扰,你可以考虑使用
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
删除所有的XML声明的,只是写自己的String
你的输出流/方法的开始
如果您依赖于DOCTYPE
文件(例如命名实体的使用),那么这将不再是独立的,因此standalone="yes"
不会在XML声明被允许。
然而独立的XML可以在任何地方使用,非独立是不加载的外部XML解析器问题。
我没有看到这个声明会如何是一个问题,比与不支持XML软件的互操作性等,但一些可怕的正则表达式汤。
jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");
这个工作对我JDK1.7。独立= \“无\”可以拆下来获取XML部分只休息
如果您仅使用默认javax.xml包,你可以设置编组为“真”的JAXB_FRAGMENT选项(这忽略了默认XML处理指令),并使用XMLStreamWriter的writeProcessingInstruction方法插入自己:
xmlStreamWriter.writeProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
jaxbMarshaller.setProperty( Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
jaxbMarshaller.marshal(object, xmlStreamWriter);
xmlStreamWriter.writeEndDocument();
你可以使用:marshaller.setProperty( “jaxb.fragment”,Boolean.TRUE);
它为我关于Java 8
如果你得到财产例外,添加以下配置:
jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders",
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlDeclaration", Boolean.FALSE);
jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);