Java 如何在JAXB中生成xml时为空值生成xml单个空标记

Java 如何在JAXB中生成xml时为空值生成xml单个空标记,java,jaxb,Java,Jaxb,我正在尝试使用JAXB生成xml,同时将对象转换为xml以获取空值,它将出现双空标记,如: <tag></tag> 但产出是这样的: <VoyageID xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 我不想要空的策略描述。 只需要以下输出: </tag> 但我试图删除额外的信息xmlns:xsi,但无法使其正常工作。我也尝试使用package-

我正在尝试使用JAXB生成xml,同时将对象转换为xml以获取空值,它将出现双空标记,如:

<tag></tag>
但产出是这样的:

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

我不想要空的策略描述。 只需要以下输出:

</tag>
但我试图删除额外的信息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>


正如您所知,
是相同的。 但是如果您真的想要预期的输出,我认为您需要
javax.xml.transform.TransformerFactory.newTransformer()

我没有你的代码示例,所以我创建了一次。 你能测试下面的代码吗

最终VesselDetails someObj=新VesselDetails();
final JAXBContext context=JAXBContext.newInstance(VesselDetails.class);
final Marshaller=context.createMarshaller();
setProperty(marshaller.JAXB_格式的_输出,Boolean.TRUE);
StringWriter inputWriter=新StringWriter();
marshaller.marshall(someObj,输入编写器);
Source Source=新的StreamSource(新的StringReader(inputWriter.toString());
Writer resultWriter=new StringWriter();
Result res=新的StreamResult(resultWriter);
TransformerFactory transFactory=TransformerFactory.newInstance();
变压器=transFactory.newTransformer();
变换(源,res);
System.out.println(resultWriter.toString());
输出:

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

<VesselDetails>
    <OceanCarrier>
        <Vesselname/>
        <VoyageID/>
        <PortofEntry/>
    </OceanCarrier>
</VesselDetails>