jaxb を使用して、生成された xml から不要な要素を削除する方法があるかどうかを知りたいです。次のように xsd 要素を定義しています。
<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>
マーシャリング時に Title フィールドを空白のままにすると
、min-length の制限によりSAXExceptionがスローされます。だから私がしたいのは<Title/>
、生成された XML からの出現全体を削除することです。今、最小長の制限を削除したので、<Title>
要素をEMPTYとして追加しています。
<Title></Title>
しかし、私はこのようにしたくありません.どんな助けでも大歓迎です.私はマーシャリングにjaxb 2.0を使用しています.
アップデート:
以下は私の変数定義です:
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);