解组空 xml 元素 jaxb
Unmarshalling empty xml element jaxb
我有一个像这样的空标签 <tagName/>
。当我解组它时,如果此 属性 是 long 或 float 的类型,则它为 null。但是如果这个属性是字符串类型,那么属性就是tagName = '';
。编组后是<tagName></tagName>
。如何在解组时将字符串 java 属性 的空标签名称设置为 null?
有(至少)两种方法可以做到这一点。
- 如果 classes 是你自己的,而不是从 xsd 或类似的自动生成的,你可以使用适配器。
例如 class 购物车:
@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。
- 如果您的 classes 是从 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。
适配器的使用更符合我的喜好,但取决于您的情况。希望其中一个案例涵盖了您。
我有一个像这样的空标签 <tagName/>
。当我解组它时,如果此 属性 是 long 或 float 的类型,则它为 null。但是如果这个属性是字符串类型,那么属性就是tagName = '';
。编组后是<tagName></tagName>
。如何在解组时将字符串 java 属性 的空标签名称设置为 null?
有(至少)两种方法可以做到这一点。
- 如果 classes 是你自己的,而不是从 xsd 或类似的自动生成的,你可以使用适配器。
例如 class 购物车:
@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。
- 如果您的 classes 是从 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。
适配器的使用更符合我的喜好,但取决于您的情况。希望其中一个案例涵盖了您。