JAXB输出格式不正确
问题描述:
我和编组代码预期XML问题JAXB输出格式不正确
public void xmleg() throws XMLStreamException
{
XMLOutputFactory factory = XMLOutputFactory.newInstance();
XMLStreamWriter writer = factory.createXMLStreamWriter(System.out);
writer.writeStartDocument();
writer.writeStartElement("Zoos1");
QName q=new QName("","Zoo");
for(Zoo add: zoo_list)
{
try
{
JAXBContext jaxbContext = JAXBContext.newInstance(Zoos.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true);
jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
jaxbMarshaller.marshal(new JAXBElement<Zoot>(q,Zoo.class,add),System.out);
} catch (JAXBException e) {
e.printStackTrace();
}
}
writer.writeEndDocument();
writer.close();
}
}
是否使用了XMLStreamWriter打印所需的default..But标签的所有语句写在最后的印刷开始标记,开始元素。
所生成的输出是:
<Zoo>
<linkId>0</linkId>
<name>fjjfjfrj</name>
</Zoo>
<Zoo>
<linkId>0</linkId>
<name>fgjfjfj</name>
</Zoo>
<?xml version="1.0" ?><Zoos></Zoos>
预期输出应该是:
<?xml version="1.0" ?>
<Zoo>
<linkId>0</linkId>
<name>fjjfjfrj</name>
</Zoo>
<Zoo>
<linkId>0</linkId>
<name>fgjfjfj</name>
</Zoo>
答
对于您使用StAX添加根元素的用例,您还需要具有JAXB元帅到XMLStreamWriter
。当编组到文档中间时,您需要确保您设置了JAXB_FRAGMENT
属性。下面是一个例子:
import javax.xml.bind.*;
import javax.xml.stream.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Zoo.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
XMLOutputFactory xof = XMLOutputFactory.newFactory();
XMLStreamWriter xsw = xof.createXMLStreamWriter(System.out);
xsw.writeStartDocument();
xsw.writeStartElement("zoos");
Zoo zoo1 = new Zoo();
zoo1.linkId = 1;
zoo1.name = "foo";
marshaller.marshal(zoo1, xsw);
Zoo zoo2 = new Zoo();
zoo2.linkId = 2;
zoo2.name = "bar";
marshaller.marshal(zoo2, xsw);
xsw.writeEndElement();
xsw.writeEndDocument();
xsw.close();
}
}
当编组到一个XMLStreamWriter
输出将不会被格式化。
<?xml version="1.0" ?><zoos><zoo><linkId>1</linkId><name>foo</name></zoo><zoo><linkId>2</linkId><name>bar</name></zoo></zoos>
有关格式化的StAX输出退房回答下列问题帮助: