xsd jaxb - Удалить 'standalone="yes" из созданного XML




set from (9)

У меня нет достаточно высокой «репутации», чтобы иметь «привилегию» для комментариев. ;-)

@Debasis, обратите внимание, что указанное свойство:

"com.sun.xml.internal.bind.xmlHeaders"

должно быть:

"com.sun.xml.bind.xmlHeaders" (without the "internal", which are not meant to be used by the public)

Если я использую свойство «internal», как вы это делали, я получаю javax.xml.bind.PropertyException

Знаете ли вы о настройке JAXB, чтобы предотвратить создание независимого = «да» в полученном XML?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");

Это работало для меня с JDK1.7. standalone = \ "no \" можно удалить, чтобы получить только остаток части xml


Если вы используете только пакет javax.xml по умолчанию, вы можете установить параметр JAXB_FRAGMENT для маршаллера в значение «true» (это исключает инструкцию по обработке xml по умолчанию) и использовать метод writeProcessingInstruction XMLStreamWriter для вставки вашего собственного:

xmlStreamWriter.writeProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
jaxbMarshaller.setProperty( Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
jaxbMarshaller.marshal(object, xmlStreamWriter);
xmlStreamWriter.writeEndDocument();

Вы можете использовать: marshaller.setProperty ("jaxb.fragment", Boolean.TRUE);

Это работает для меня на Java 8


просто если кто-то еще борется с этой проблемой, вы можете подумать об использовании

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);

для удаления всего объявления XML и просто написать свою собственную String в начале вашего потока / метода вывода


Вы можете использовать

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);

или

marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", Boolean.FALSE)

для отключения объявления XML по умолчанию, а затем добавить пользовательскую декларацию XML,

<?xml version="1.0" encoding="UTF-8"?>

от

marshaller.setProperty("com.sun.xml.bind.xmlHeaders",
      "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");

к сгенерированному xml, что позволяет избежать автономного = «да» .


в JAXB, который является частью JDK1.6

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);

Если вы делаете документ зависимым от DOCTYPE (например, используете именованные объекты), то он перестанет быть автономным, поэтому standalone="yes" не будет разрешен в декларации XML.

Однако автономный XML можно использовать где угодно, в то время как нестандартный является проблематичным для XML-парсеров, которые не загружают внешние.

Я не вижу, как это объявление может быть проблемой, отличной от совместимости с программным обеспечением, которое не поддерживает XML, но каким-то ужасным супом регулярного выражения.


CDATA обозначает символы. Вы можете использовать это, чтобы избежать некоторых символов, которые иначе будут обрабатываться как обычный XML. Данные внутри этого не будут анализироваться. Например, если вы хотите передать URL-адрес, который содержит & в нем, вы можете использовать CDATA для этого. В противном случае вы получите сообщение об ошибке, поскольку оно будет проанализировано как обычный XML.





xml xsd jaxb xml-binding