gpt4 book ai didi

java - 解码空 xml 元素 jaxb

转载 作者:行者123 更新时间:2023-11-30 01:58:22 25 4
gpt4 key购买 nike

我有一个像这样的空标签 <tagName/> 。当我解码它时,如果该属性是 long 或 float 类型,则它为 null。但如果这个属性是字符串类型,那么属性就是 tagName = ''; 。编码后是 <tagName></tagName> 。如何在解码时将空标记名称(字符串 java 属性)设置为 null?

最佳答案

(至少)有两种方法可以做到这一点。

  1. 如果这些类是您自己的,而不是从 xsd 或类似的类自动生成的,您可以使用适配器。

例如购物车类:

@XmlRootElement(name = "Cart")
@XmlAccessorType(XmlAccessType.FIELD)
public class Cart {

@XmlJavaTypeAdapter(EmptyTagAdapter.class)
protected String tagName;
}

可以使用如下适配器:

public class EmptyTagAdapter extends XmlAdapter<String, String> {

@Override
public String marshal(String arg0) throws Exception {
return arg0;
}

@Override
public String unmarshal(String arg0) throws Exception {
if(arg0.isEmpty()) {
return null;
}
return arg0;
}
}

对于如下所示的 xml:

<Cart>
<tagName/>
</Cart>

您将得到空 tagName 作为 null。

  • 如果您的类是从 xsd 生成的,您可以提到该字段可以为空。
  • 例如如下:

    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.1">
    <xs:element name="Cart">
    <xs:complexType>
    <xs:all>
    <xs:element name="tagName" type="xs:string" nillable="true" />
    </xs:all>
    </xs:complexType>
    </xs:element>
    </xs:schema>

    然后您需要在 xml 中包含空元素 xsi:nil="true",如下例所示:

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

    它会产生相同的结果,值为 null。

    适配器的使用更符合我的喜好,但取决于您的情况。希望其中一个案例能涵盖您。

    关于java - 解码空 xml 元素 jaxb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53667156/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com