JAXB:带缩进的Marshal输出XML在第一行创建空行换行符

Tha*_*ham 10 java jaxb moxy

当我使用此属性封送XML时

marshal.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
marshal.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
Run Code Online (Sandbox Code Playgroud)

它会在最顶部产生一个空的换行符

//Generate empty line break here    
<XX>
    <YY>
        <PDF>pdf name</PDF>
        <ZIP>zip name</ZIP>
        <RECEIVED_DT>received date time</RECEIVED_DT>
    </YY>
</XX>
Run Code Online (Sandbox Code Playgroud)

我认为原因是因为marshal.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);删除<?xml version="1.0" encoding="UTF-8" standalone="yes"?>了输出xml在开头的一个换行符.有没有办法来解决这个问题?我使用JAXB自带JDK 6,Moxy会遇到这个问题吗?

bdo*_*han 2

正如您所指出的,EclipseLink JAXB (MOXy)没有这个问题,因此您可以使用它(我是 MOXy 的负责人):

选项1

一种选择是使用java.io.FilterWriterorjava.io.FilterOutputStream并自定义它以忽略前导新行。

选项#2

另一种选择是编组到 StAX,并使用支持格式化输出的 StAX 实现。我自己没有尝试过,但下面链接的答案建议使用com.sun.xml.txw2.output.IndentingXMLStreamWriter.