我有以下XSD文件: -
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="emp" targetNamespace="emp"
elementFormDefault="qualified">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="Case_Detail" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Case_Detail">
<xs:complexType>
<xs:sequence>
<xs:element ref="Central_Case_ID"/>
<xs:element ref="Agency_Case_ID"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Central_Case_ID">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Agency_Case_ID">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="50"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>
我已经生成了JAXB类并试图编组到XML文件中。在生成的XML文件中,我可以为XML文件中的每个元素提供属性,如果它是null,则: 对于例如: -
<Central_Case_ID xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
我的要求是拥有没有这些属性的元素,即使某个元素在enitre XML文件中具有空值。为此,我尝试了很多,我在XSD中做了很多更改,比如更新的elementFormDefault =&#34;不合格&#34;和arguementFormDefault到unqalified但它没有工作。然后我在JAXB类中对@annotations进行了更改,并尝试在编组对象中设置一些属性,如No_Namespace_schema_location但没有任何效果。
请建议。
答案 0 :(得分:1)
我使用XJC从XML Schema生成了默认的Java模型。
<强>演示强>
下面的演示代码填充对象模型(将centralCaseID
属性设置为null
)并将其编组为XML。
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance("emp");
ObjectFactory objectFactory = new ObjectFactory();
Root root = objectFactory.createRoot();
CaseDetail caseDetail = objectFactory.createCaseDetail();
caseDetail.setCentralCaseID(null);
root.getCaseDetail().add(caseDetail);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
}
}
<强>输出强>
以下是运行演示代码的输出。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root xmlns="emp">
<Case_Detail/>
</root>
需要注意的事项:
写出了名称空间声明。这是因为映射命名空间限定的@XmlSchema
类上存在package-info
注释(请参阅:http://blog.bdoughan.com/2010/08/jaxb-namespaces.html)。
@javax.xml.bind.annotation.XmlSchema(
namespace = "emp",
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package emp;
与centralCaseID
属性对应的元素未出现在XML中。这是null
属性的默认行为(请参阅:http://blog.bdoughan.com/2012/04/binding-to-json-xml-handling-null.html)。