在unmarshal期间使用JAXB格式化XML

Tob*_*ias 7 java xml pretty-print jaxb

我想在使用JAXB解组时格式化XML文档.Unmarshal看起来像:

Unmarshaller u = createAndsetUpUnmarshaller(enableValidation, evtHandler, clazz);
return u.unmarshal(new ByteArrayInputStream(stringSource.getBytes()));
Run Code Online (Sandbox Code Playgroud)

编组可以通过以下方式格式化代码:

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

但是对于unmarchal进程来说这是不可能的......任何想法如何在解组过程中(或之后)使用JAXB格式化XML字符串?

顺便说一下:我在这里看了一些关于漂亮打印的帖子,但我想用JAXB做到这一点!

sub*_*bes 41

在解组它时格式化xml代码在逻辑上毫无意义吗?

  • 24赞成并接受......令人震惊. (4认同)

Jus*_*owe 21

如果要记录与您刚刚解组的XML相对应的格式化XML,您可以使用您指定的属性,即将解组的对象重新编组回XML.

/**
 * Marshall input object to a formatted XML String
 */
protected <T> String marshal(T input) throws JAXBException {
    StringWriter writer = new StringWriter();

    JAXBContext jc = JAXBContext.newInstance(input.getClass());
    Marshaller marshaller = jc.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
    marshaller.marshal(input, writer);
    return writer.toString();
}
Run Code Online (Sandbox Code Playgroud)

另一方面,如果您只想重新格式化XML,那么您可能应该使用JAXP而不是JAXB.