Как сгенерировать xml один пустой тег для нулевых значений при генерации xml в JAXB - PullRequest
2 голосов
/ 18 мая 2019

Я пытаюсь сгенерировать xml, используя JAXB. При преобразовании объекта в xml для нулевых значений его пустой двойной тег выглядит следующим образом:

<tag></tag>

Но мне нужен этот вывод:

</tag>

Я попытался

@XmlElement(nillable = true)
private String VoyageID;

Но вывод идет так:

<VoyageID xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>

Я не хочу нулевого описания политики.Просто хочу этот вывод:

Но я попытался удалить дополнительную информацию xmlns: xsi, но я не могу заставить ее работать.Я также попытался использовать package-info.java, но этот URL-адрес пространства имен находится над корневым элементом xml.

<VesselDetails>
            <OceanCarrier Code="">
                <Vesselname></Vesselname>
                <VoyageId></VesselVoyageId>
                <PortofEntry></PortofEntry>
            </OceanCarrierSCAC>
<VesselDetails/>

Я хочу вывод, как показано ниже:

<VesselDetails>
<OceanCarrier Code=" ">
<Vesselname/>
<VoyageId/>
<PortofEntry/>
</OceanCarrierSCAC>
</VesselDetails>

1 Ответ

1 голос
/ 18 мая 2019

Как вы знаете, <Vesselname/> и <Vesselname></Vesselname> одинаковы. но если вы действительно хотите, чтобы ваш ожидаемый результат, я думаю, вам нужно javax.xml.transform.TransformerFactory.newTransformer()

У меня не было вашего примера кода, поэтому я создал его один раз. Можете ли вы проверить код ниже?

final VesselDetails someObj = new VesselDetails();
final JAXBContext context = JAXBContext.newInstance(VesselDetails.class);
final Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
StringWriter inputWriter = new StringWriter();
marshaller.marshal(someObj, inputWriter);

Source source = new StreamSource(new StringReader(inputWriter.toString()));
Writer resultWriter = new StringWriter();
Result res = new StreamResult(resultWriter);

TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
transformer.transform(source, res);

System.out.println(resultWriter.toString());

Выход:

<VesselDetails>
    <OceanCarrier>
        <Vesselname/>
        <VoyageID/>
        <PortofEntry/>
    </OceanCarrier>
</VesselDetails>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...