Joh*_*rim 78 xml xsd jaxb xml-binding
您是否知道JAXB设置可以防止在生成的XML中生成standalone ="yes"?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Run Code Online (Sandbox Code Playgroud)
so_*_*_mv 118
在JAXB中,它是JDK1.6的一部分
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
Run Code Online (Sandbox Code Playgroud)
Sam*_*Sam 59
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", Boolean.FALSE);
Run Code Online (Sandbox Code Playgroud)
可以用来没有
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Run Code Online (Sandbox Code Playgroud)
但是,我不会考虑这种最佳做法.
War*_*Fox 57
你可以使用
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
Run Code Online (Sandbox Code Playgroud)
要么
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", Boolean.FALSE)
Run Code Online (Sandbox Code Playgroud)
禁用默认的XML声明,然后添加自定义XML声明,
<?xml version="1.0" encoding="UTF-8"?>
Run Code Online (Sandbox Code Playgroud)
通过
marshaller.setProperty("com.sun.xml.bind.xmlHeaders",
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
Run Code Online (Sandbox Code Playgroud)
到生成的xml,从而避免standalone ="yes"属性.
如果其他人还在讨论这个问题,你可以考虑使用
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
Run Code Online (Sandbox Code Playgroud)
删除所有XML声明,并String在输出流/方法的开头编写自己的声明
如果您使文档依赖于DOCTYPE(例如使用命名实体),那么它将不再是独立的,因此standalone="yes"在 XML 声明中将不被允许。
然而,独立 XML 可以在任何地方使用,而非独立 XML 对不加载外部的 XML 解析器来说是有问题的。
除了与不支持 XML 但一些可怕的正则表达式汤的软件的互操作性之外,我看不出这个声明有什么问题。
小智 5
jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");
Run Code Online (Sandbox Code Playgroud)
这对我的 JDK1.7 有用。standalone=\"no\" 可以删除以仅获取 xml 部分的其余部分
小智 5
如果您仅使用默认的 javax.xml 包,则可以将编组器的 JAXB_FRAGMENT 选项设置为“true”(这会忽略默认的 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();
Run Code Online (Sandbox Code Playgroud)