我试图从Spring中的Jaxb2Marshaller类中对PrettyPrint / indent / format输出XML进行设置,即使我在Web上的其他地方进入该属性,该文件仍然在一个线。这是我的豆子宣言:
<bean id="pingerMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
<list>
...
</list>
</property>
<property name="marshallerProperties">
<map>
<entry>
<key>
<util:constant static-field="javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT" />
</key>
<value type="java.lang.Boolean">true</value>
</entry>
</map>
</property>
</bean>
作者:
<bean id="itemWriter" class="org.springframework.batch.item.xml.StaxEventItemWriter">
<property name="marshaller" ref="pingerMarshaller" />
<property name="overwriteOutput" value="true" />
<property name="resource" value="file:\C:\source\pinger\pingerExample.xml" />
</bean>
我错过了什么,或者这是一个错误?
答案 0 :(得分:4)
当编组到StAX的Marshaller.JAXB_FORMATTED_OUTPUT
和XMLStreamWriter
时,XMLEventWriter
不适用(这是我假设org.springframework.batch.item.xml.StaxEventItemWriter
的意思)。如果您希望JAXB格式化结果,则需要基于OutputStream
或Writer
的目标(如果可用)。
答案 1 :(得分:0)
我知道这篇文章已经很老了,但即使我在使用 JAXB/Moxy
marshaling
和 unmarshaling
以及 XMLStreamWriter
和XMLEventWriter
。
我在这里发布答案,以便将来对其他人有用。以下方法可用于漂亮打印或美化 XML
。
如果您使用的是 XmlStreamWriter
,那么您可以使用 IndentingXMLStreamWriter
来漂亮地打印输出,如下所示:
private final XMLEventWriter xmlEventWriter = new IndentingXMLStreamWriter(XMLOutputFactory.newInstance().createXMLStreamWriter(System.out));
这来自以下 dependency
包:
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>txw2</artifactId>
<version>3.0.1</version>
</dependency>
对于 XMLEventWriter
,您可以像这样使用 IndentingXMLEventWriter
:
private final XMLEventWriter xmlEventWriter = new IndentingXMLEventWriter(XMLOutputFactory.newInstance().createXMLEventWriter(System.out));
这来自以下依赖:
<dependency>
<groupId>net.java.dev.stax-utils</groupId>
<artifactId>stax-utils</artifactId>
<version>20070216</version>
</dependency>