Estoy ordenando objetos en un archivo XML. ¿Cómo puedo agregar comentarios en ese archivo XML?Agregar comentarios XML en el archivo marshaled
Respuesta
No veo la manera de hacerlo solo con JAXB. Sin embargo, creo que se puede aprovechar DOM para obtener el efecto deseado:
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);
Dónde JAXBContext es la JAXBContext objeto que está trabajando y jaxbObject es el objeto a ser movilizados. Esta muestra simplemente agrega el comentario al final del documento. Para una ubicación diferente, debe atravesar el DOM a través del objeto doc o usar XPath para encontrar el elemento exacto al que desea que se agregue el comentario y usar appendChild en él.
Se pueden añadir comentarios inmediatamente después de la exposición de motivos con los propietarios com.sun.xml.bind.xmlHeaders Marshaller propiedad (see XML Preamble Control)
En el JAXB-implementación que se incluye jdk1.6.0_29 la propiedad se llama "com. sun.xml.internal.bind.xmlHeaders"
Véase también la pregunta: How to add DOCTYPE and xml processing instructions when marshalling with JAXB?
Así que para conseguir este XML con la prueba de comentario después de la exposición de motivos:
<?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>
Puede utilizar esta Java Código:
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);
No funciona con jaxb-impl-2.2.6-b35, el setProperty ("com.sun.xml.internal.bind.xmlHeaders", ...) falla con PropertyException –
@MartinVysny consider com.sun.xml.internal .bind.xmlHeaders – Woot4Moo
Si alguno viene a esto ahora, al igual que acabo de hacer, vale la pena señalar que la propiedad de hacer esto es ahora com.sun.xml.bind.xmlHeaders
(no interna parece), por lo que puede resolver el problema como este (solo he probado con EclipseLink MOXY):
JAXBContext context = JAXBContext.newInstance(Player.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.setProperty("com.sun.xml.bind.xmlHeaders", "\n<!-- Test Comment -->");
m.marshal(player, System.out);
la siguiente información proviene originalmente de Marshaller Properties en la documentación JAXB RI Extensions en jaxb.java.net:
control Preámbulo XML
Esta propiedad le permite especificar un preámbulo XML ( declaración) y cualquier adicional de inhibidores de la proteasa, comentarios, declaración DOCTYPE que le sigue. Esta propiedad tiene efecto solo cuando está clasificándose en OutputStream, Writer o StreamResult. Tenga en cuenta que esta propiedad interactúa con la propiedad Marshaller.JAXB_FRAGMENT. Si esa propiedad no se modifica o se configura como falsa, JAXB siempre escribirá su preámbulo XML, por lo que esta propiedad solo se puede usar para escribir PI, comentarios, DOCTYPE, etc. Por otro lado, si está configurado como verdadero , entonces JAXB no escribirá su propio preámbulo de XML, por lo que esta propiedad puede contener preámbulo de XML personalizado.
- 1. Comentarios anidados en XML?
- 2. ¿Cómo insertar comentarios XML en Serialización XML?
- 3. necesito agregar comentarios en un documento xml existente
- 4. Cómo leer comentarios de XML utilizando xslt y agregar texto de comentarios en un elemento
- 5. XML comentarios y "-"
- 6. ¿Puede ConfigurationManager conservar comentarios XML en Save()?
- 7. Agregar comentarios a Makefile
- 8. Agregar comentarios XML a las propiedades de clase generadas por el diseñador de LINQ to SQL
- 9. Groovy editar archivo XML, guardar comentarios, saltos de línea
- 10. quita los comentarios del archivo xml e imprime bastante
- 11. C# XML Comentarios: ¿Cuántas referencias de <see ... /> en comentarios XML son útiles?
- 12. Añadir archivo JSON comentarios
- 13. métodos Documentar sobrecargados con el mismo XML comentarios
- 14. ¿Puedo agregar comentarios a un archivo de requisitos de pip?
- 15. comentarios de C# xml para propiedades/evaluadores
- 16. ¿Cómo agregar comentarios a un archivo de configuración Exuberante Ctags?
- 17. Regex a eliminar los comentarios en el archivo XML en Java Eclipse
- 18. Cómo agregar 'Comentarios' a un archivo JPEG usando C#
- 19. ¿Es posible agregar comentarios a un archivo csproj?
- 20. Incluyendo comentarios XML en DataContract Serializer Metadata
- 21. Personalizar comentarios XML en Visual Studio 2008
- 22. comentarios Heredar XML de interfaces en C#
- 23. Acceso a comentarios en XML con XPath
- 24. XML Los comentarios no aparecen en el Servicio WCF
- 25. ¿Cómo puedo agregar comentarios en MySQL?
- 26. Agregar documentación/comentarios XML a las propiedades/campos en las clases generadas por EF
- 27. XML en el archivo csproj
- 28. Comentarios sobre el archivo .pro Qt Creator
- 29. cómo agregar etiquetas en xml en android? y cómo guardar ese archivo xml?
- 30. Xcode plist file - comentarios desaparecidos, archivo reformateado
Por si alguien está manejando JAXB está escuchando - en segundo lugar la necesidad de agregar comentarios (y líneas nuevas para impresión bonita), es decir, la necesidad de insertar nodos en el árbol DOM durante la clasificación. – Stroboskop