2

JAXB を使用して、XSD スキーマを POCO にバインドします。XSD スキーマを記述する 2 つの異なる方法を試しましたが、それぞれに問題があります。

オプション1

問題: 各要素は<Elements>ではなく XMLで表され<Element>、さらに、 などのコンテナ内にはありません<ElementsContainer>

XSD スキーマ

<xs:element name="Root" type="RootType" />

<xs:complexType name="RootType" />
  <xs:sequence>
    <xs:element name="Elements" type="xs:string" maxOccurs="unbounded"/>
  </xs:sequence>
</xs:complexType>

ジャワ

RootType r = new RootType();
r.getElements.add("Str1");
r.getElements.add("Str2");

マーシャリングされた XML

<Root>
  <Elements>Str1</Elements> 
  <Elements>Str2</Elements>
</Root>
オプション 2

問題: Java コードの見栄えが悪くなります。

XSD スキーマ

<xs:element name="Root" type="RootType" />

<xs:complexType name="RootType" />
  <xs:element name="Elements">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Element" type="xs:string" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:complexType>

ジャワ

RootType r = new RootType();
r.getElements().getElement().add("Str1");
r.getElements().getElement().add("Str2");

マーシャリングされた XML

<Root>
  <Elements>
    <Element>Str1</Element>
    <Element>Str2</Element>
  </Elements>
</Root>

質問:オプション 2のように XML を出力し、オプション 1のようにコードが記述されるスキーマを作成する方法はありますか?

編集: <xs:list>要素には空白が含まれている可能性があるため、オプションではありません。

4

1 に答える 1

1

Java クラスから始める

Java オブジェクトから開始する場合は、@XmlElementWrapper注釈を使用してグループ化要素を追加できます。

@XmlElementWrapper(name="Elements")
@XmlElement(name="Element)
public List<Element> getElements() {
    return elements;
}

XML スキーマから始める

XJC ツールは非常に拡張性があります。XJC ツール用に作成された次のプラグインを使用すると@XmlElementWrapper、モデルに注釈を生成できます。

于 2013-03-14T20:15:13.970 に答える