3

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);
4

2 に答える 2

4

タイトルの値を空の文字列""に設定すると、生成さ<Title/>れます。設定するとnull、要素を完全に省略できます。

于 2012-09-03T09:36:27.667 に答える