【发布时间】:2013-03-25 18:24:54
【问题描述】:
我想使用 xstream 将内容附加到 xml,但每次运行时使用 xstream.toXml(obj,writer),它正在向内容添加 xml 声明,我们可以在 xstream 中省略 xml 声明吗?
【问题讨论】:
-
什么 XML 声明,可以显示代码吗?
-
@eipark 他(大概)是指 XML 的“标题行”声明 。看我的回答。
我想使用 xstream 将内容附加到 xml,但每次运行时使用 xstream.toXml(obj,writer),它正在向内容添加 xml 声明,我们可以在 xstream 中省略 xml 声明吗?
【问题讨论】:
我刚刚遇到了这个问题(使用 XStream 1.4.4)。如果您使用 StaxDriver 而不是 JAXP DOM 一或默认 XPP3 一,则会出现问题。所以要么切换到:
XStream xstream = new XStream();
(在类路径中使用 XPP3 和 xmlpull JAR)或
XStream xstream = new XStream(new DomDriver());
而不是
XStream xstream = new XStream(new StaxDriver());
这可能是 XStream 中的一个(一致性)错误,因为它的FAQ explicitly states 是用于编写 sn-ps 并且不会产生 XML 声明(另请参阅this question)。它没有提供不生产它的方法/设置,因为它永远不应该生产!我会考虑和他们一起提出。
【讨论】:
在 XStream 团队正在解决此问题的同时,您可以采取一种变通方法。覆盖StaxDriver中的createStaxWriter:
StaxDriver driver = new StaxDriver() {
@Override
public StaxWriter createStaxWriter(XMLStreamWriter out) throws XMLStreamException {
//the boolean parameter controls the production of XML declaration
return createStaxWriter(out, false);
}
};
XStream xstream = new XStream(driver);
【讨论】: