我想知道是否有從生成的xml中使用jaxb.I刪除不需要的元素,我的xsd元素定義如下。如何通過jaxb從生成的XML中刪除不需要的元素
<xsd:element name="Title" maxOccurs="1" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
A name given to the digital record.
</xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"></xsd:minLength>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
正如你可以看到它是不是一個強制性的元素,因爲
的minOccurs = 「0」
但是,如果它不是空的長度應爲1
<xsd:minLength value="1"></xsd:minLength>
在編組的時候,如果我把標題字段留空,它會拋出 SAXException由於最小長度限制。 所以我想要做的就是從產生XML.Right去除<Title/>
整個發生,現在我已刪除的最小長度的限制,因此它被添加<Title>
元素EMPTY
<Title></Title>
但我不希望它像這樣。任何幫助表示讚賞。我正在使用jaxb 2.0進行編組。
UPDATE:
以下是我的變量definiton:
private JAXBContext jaxbContext;
private Unmarshaller unmarshaller;
private SchemaFactory factory;
private Schema schema;
private Marshaller marshaller;
編組代碼。
jaxbContext = JAXBContext.newInstance(ERecordType.class);
marshaller = jaxbContext.createMarshaller();
factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
schema = factory.newSchema((new File(xsdLocation)));
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
ERecordType e = new ERecordType();
e.setCataloging(rc);
/**
* Validate Against Schema.
*/
marshaller.setSchema(schema);
/**
* Marshal will throw an exception if XML not validated against
* schema.
*/
marshaller.marshal(e, System.out);
在此發佈您的經驗源代碼。 – gks
@THANGA我已經更新了這個問題。 –