将 XML 注释添加到封送处理文件中

2022-09-02 21:31:27

我正在将对象封送到 XML 文件中。如何将注释添加到该 XML 文件中?


答案 1

您可以使用专有的 Marshaller 属性 com.sun..xml.bind.xmlHeaders 在前导码之后添加注释(请参见 XML 前导码控件)

在包含的 JAXB 实现jdk1.6.0_29中,该属性称为“com.sun.xml.internal.bind.xmlHeaders”

另请参阅问题:使用 JAXB 进行编组时如何添加 DOCTYPE 和 xml 处理指令?

因此,要获取此 XML 以及前导码后面的测试注释,请执行以下操作:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Test Comment -->
<player>
    <name>Daniel</name>
    <birthday>1982-06-09T00:00:00+02:00</birthday>
</player>

您可以使用以下 Java 代码:

JAXBContext context = JAXBContext.newInstance(Player.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.setProperty("com.sun.xml.internal.bind.xmlHeaders", "\n<!-- Test Comment -->");
m.marshal(player, System.out);

答案 2

我看不出有办法单独用JAXB来做到这一点。但是,我认为您可以利用DOM来获得所需的效果:

final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
final DocumentBuilder builder = factory.newDocumentBuilder();
final Document doc = builder.getDOMImplementation().createDocument(null, null, null);

final Binder<Node> binder = jaxbContext.createBinder();
binder.marshal(jaxbObject, doc);
final Comment comment = doc.createComment("This is a comment");
doc.appendChild(comment);

final DOMSource domSource = new DOMSource(doc);
// use System.out for testing
final StreamResult streamResult = new StreamResult(System.out);
final TransformerFactory tf = TransformerFactory.newInstance();
final Transformer serializer = tf.newTransformer();
serializer.transform(domSource, streamResult);

其中 jaxbContext 是您正在使用的 JAXBContext 对象,jaxbObject 是要编组的对象。此示例仅将注释追加到文档的末尾。对于其他位置,您必须通过 doc 对象遍历 DOM,或者使用 XPath 查找要将注释添加到的确切元素,并在其上使用 appendChild。


推荐