当前位置:  开发笔记 > Android > 正文

从生成的XML中删除'standalone ="yes"'

如何解决《从生成的XML中删除'standalone="yes"'》经验,为你挑选了4个好方法。

您是否知道JAXB设置可以防止在生成的XML中生成standalone ="yes"


so_mv.. 118

在JAXB中,它是JDK1.6的一部分

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);

这不会给出预期的结果.这将删除所有XML声明行.我想要的只是删除XML声明中的`standalone`属性. (11认同)


Sam.. 59

marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", Boolean.FALSE);

可以用来没有


但是,我不会考虑这种最佳做法.



1> so_mv..:

在JAXB中,它是JDK1.6的一部分

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);


这不会给出预期的结果.这将删除所有XML声明行.我想要的只是删除XML声明中的`standalone`属性.

2> Sam..:
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", Boolean.FALSE);

可以用来没有


但是,我不会考虑这种最佳做法.


很好,它的工作原理,但FWIW服务如果不能接受合法的xml就会被破坏,所以提交一份bug报告可能会很好.
在JDK1.6中不适用于JAXB.请参阅so_mv的答案以获得正确的解决方案.
谢谢,这正是我所需要的.我同意最佳做法是包含该行,但我正在接口的Web服务并不期望它.
不再起作用(JDK1.8)。

3> WarFox..:

你可以使用

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);

要么

marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", Boolean.FALSE)

禁用默认的XML声明,然后添加自定义XML声明,


通过

marshaller.setProperty("com.sun.xml.bind.xmlHeaders",
      "");

到生成的xml,从而避免standalone ="yes"属性.


带有"xmlDeclaration"的"setProperty"在飞行中爆炸:异常.
带有"xmlHeaders"的"setProperty"行也会失败.PropertyException.所以这不是一个解决方案.
无论java6还是java7,我都要添加'internal',即marshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders","<?xml version = \"1.0 \"encoding = \"UTF-8\"?>");

4> benez..:

如果其他人还在讨论这个问题,你可以考虑使用

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);

删除所有XML声明,并String在输出流/方法的开头编写自己的声明

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有