Java 如何在JAXB中生成xml时为空值生成xml单个空标记
我正在尝试使用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-
<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>