我有xsd架构:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
targetNamespace="urn:v1"
xmlns="urn:v1"
xmlns:reg="urn:v1"
xmlns:xop="http://www.w3.org/2004/08/xop/include"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
version="1.1.1">
<xs:simpleType name="ItemType">
<xs:restriction base="xs:string">
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ListItemType">
<xs:list itemType="ItemType"/>
</xs:simpleType>
<xs:complexType name="Element">
<xs:sequence>
<xs:element name="SubElement">
<xs:complexType>
<xs:sequence>
<xs:element name="SubSubElement" type="ListItemType" nillable="true" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
和JIBX生成的java类:
public class Element
{
private java.util.List<String> subElements = new java.util.ArrayList<String>();
/**
* Get the list of 'SubSubElement' element items.
*
* @return list
*/
public java.util.List<String> getSubElements() {
return subElements;
}
/**
* Set the list of 'SubSubElement' element items.
*
* @param list
*/
public void setSubElements(java.util.List<String> list) {
subElements = list;
}
/**
* Serializer for 'SubSubElement' element list.
*
* @param values
* @return text
*/
public static String serializeSubElements(java.util.List<String> values) {
if (values == null) {
return null;
} else {
java.lang.StringBuffer buff = new java.lang.StringBuffer();
for (java.util.Iterator<String> iter = values.iterator(); iter
.hasNext();) {
if (buff.length() > 0) {
buff.append(' ');
}
String value = iter.next();
buff.append(value);
}
return buff.toString();
}
}
/**
* Deserializer for 'SubSubElement' element list.
*
* @param text
* @return values
* @throws org.jibx.runtime.JiBXException on conversion error
*/
public static java.util.List<String> deserializeSubElements(String text)
throws org.jibx.runtime.JiBXException {
org.jibx.runtime.IListItemDeserializer ldser = new org.jibx.runtime.IListItemDeserializer() {
public java.lang.Object deserialize(String text) {
return text;
}
};
return (java.util.List<String>) org.jibx.runtime.Utility
.deserializeList(text, ldser);
}
}
我如何检查元素是否可以为空?我在xsd:nillable =“true”
更新:
确定没有列表的一些esier xsd:
<xs:schema targetNamespace="urn:v1" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.1.1" xmlns="urn:v1" xmlns:reg="urn:v1" xmlns:xop="http://www.w3.org/2004/08/xop/include" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="Element">
<xs:sequence minOccurs="0">
<xs:element name="SubElement" type="type1" nillable="true" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="type1">
<xs:restriction base="xs:string" />
</xs:simpleType>
</xs:schema>
public class Element
{
private String subElement;
/**
* Get the 'SubElement' element value.
*
* @return value
*/
public String getSubElement() {
return subElement;
}
/**
* Set the 'SubElement' element value.
*
* @param subElement
*/
public void setSubElement(String subElement) {
this.subElement = subElement;
}
}
再次无法收费
答案 0 :(得分:0)
您的xs:element name="SubSubElement" type="ListItemType" nillable="true" minOccurs="0"
转换为java.util.List<String> getSubElements()
。
结果列表中的每个空值都对应于xml数据中的<SubSubElement xsi:nil="true"/>
。
没有其他实用的方法可以在列表中显示空值。
因此,在这种情况下,只检查列表项是否足够。
请参阅http://www.ibm.com/developerworks/xml/library/ws-tip-null/index.html#N10142。
<强>更新强>
JiBX docs state
实例文档中也使用的xsi:nil属性不是 由JiBX 1.0支持。 JiBX 1.1增加了对此功能的支持 object attribute组中的nillable属性。
然后
此属性只能用于绑定到元素名称的对象。
因此,映射到java.util.List<String> getSubElements()
时,绝对不可能进行所需的检查。
您可以将映射更改为java.util.List<SubElement> getSubElements()
。
<SubSubElement/>
会映射到空的SubElement
实例。
通过所有JiBX来源的快速全文搜索没有显示任何关于零检查可能性的概念。
似乎JiBX对nillable
的支持仅限于特殊的编组规则。
假设nillable
仅支持元素绑定映射,这是有道理的。
示例xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
targetNamespace="urn:v1"
xmlns="urn:v1"
xmlns:reg="urn:v1"
xmlns:xop="http://www.w3.org/2004/08/xop/include"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
version="1.1.1">
<xs:complexType name="SubElement">
<xs:simpleContent>
<xs:extension base="xs:string">
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="SubElementList">
<xs:list itemType="SubElement"/>
</xs:simpleType>
<xs:complexType name="Element">
<xs:sequence>
<xs:element name="SubElement">
<xs:complexType>
<xs:sequence>
<xs:element name="SubSubElement" type="SubElementList" nillable="true" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>