Я марширую объекты в XML-файл. Как добавить комментарии в этот XML-файл?Добавить комментарии XML в маршалированный файл
ответ
Я не вижу способа сделать это только с 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 является объектом быть ранжированы. Этот пример просто добавляет комментарий в конец документа. В другом месте вам нужно будет пересечь DOM через объект doc или использовать XPath, чтобы найти точный элемент, который вы хотите добавить комментарий, и использовать на нем appendChild.
комментариев Вы можете добавить сразу после преамбулы с фирменным com.sun.xml.bind.xmlHeaders собственности ИАСА (see XML Preamble Control)
В прилагаемом JAXB-реализации jdk1.6.0_29 свойства называется «ком. sun.xml.internal.bind.xmlHeaders»
Смотрите также вопрос: How to add DOCTYPE and xml processing instructions when marshalling with JAXB?
Так, чтобы получить этот 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);
Не работает с jaxb-impl-2.2.6-b35, setProperty ("com.sun.xml.internal.bind.xmlHeaders", ...) не работает с PropertyException –
@MartinVysny рассматривает com.sun.xml.internal .bind.xmlHeaders – Woot4Moo
Если кто-то приходит к этому сейчас, как я только что сделал, это стоит отметить, что имущество, чтобы сделать это не сейчас com.sun.xml.bind.xmlHeaders
(больше не внутренняя это кажется), так что вы можете решить эту проблему, как это (я только пробовал с 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);
следующая информация первоначально поступает из Marshaller Properties в JAXB RI Extensions документации по jaxb.java.net:
XML Преамбула управления
Это свойство позволяет указать XML преамбулу ( декларация) и любые дополнительные PIs, комментарии, DOCTYPE декларацию , что следует за ним. Это свойство вступает в силу только тогда, когда вы находитесь , сортируя по OutputStream, Writer или StreamResult. Обратите внимание, что это свойство взаимодействует с свойством Marshaller.JAXB_FRAGMENT. Если это свойство не затронуто или установлено в false, тогда JAXB всегда будет писать своей преамбулой XML, поэтому это свойство можно использовать только для написания PI, комментариев, DOCTYPE и т. Д. С другой стороны, если для него установлено значение true , затем JAXB не будет писать собственную преамбулу XML, поэтому это свойство может содержать пользовательскую XML-преамбулу .
- 1. Добавить комментарии XML в маршалированный файл с помощью JAXBContext
- 2. Добавить файл JSon комментарии
- 3. Как добавить комментарии xml в MrefBuilder (EXE)
- 4. Как объединить комментарии XML в файл .cs?
- 5. Добавить комментарии ASCII в двоичный файл C?
- 6. Добавить в файл XML
- 7. Добавить в файл XML
- 8. Android Raw XML-файл вставляет комментарии
- 9. XML-комментарии в MonoDevelop
- 10. XML-комментарии в Resources.Designer.cs?
- 11. Вложенные комментарии в XML?
- 12. Как вставить XML-комментарии в XML-сериализацию?
- 13. Считываемые генерируемые комментарии xml
- 14. Как удалить XML-комментарии
- 15. .DLL комментарии включены в .XML
- 16. Как добавить данные XML в XML-файл
- 17. Python Добавить xml в новый файл xml
- 18. Добавить комментарии в pdf
- 19. Добавить элемент в xml-файл
- 20. Scala - Добавить XML в файл
- 21. Как сохранить комментарии XML в JAXB?
- 22. XML в комментарии к документации XML (C#)
- 23. Как добавить пример кода типа списка в комментарии XML?
- 24. Как добавить файл XML в другой файл XML
- 25. Преобразование Doxygen в XML-комментарии
- 26. Комментарии кодов XML в .NET
- 27. Удалить комментарии в XML android
- 28. XML-комментарии и "-"
- 29. DRY XML комментарии
- 30. Включая комментарии XML - Swashbuckle
На всякий случай кто-то, управляющий JAXB, слушает - во-вторых, необходимо добавить комментарии (и новые строки для печати), то есть необходимость вставлять узлы в дерево DOM во время сортировки. – Stroboskop