2017-12-13 14 views
1

私はこれに対する答えを見つけることができませんでした。 <all>タグは、子要素をmaxOccurs=“1”に制限するため、答えではありません。1つ以上の要素がリスト(maxOccurs = unbounded)である場合に、<sequence>に要素の順序を無視することは可能ですか?

<xsd:sequence> 
    <xsd:element name=“name” type=“xsd:string” minOccurs=“1”/> 
    <xsd:element name=“children” type=“xsd:string” minOccurs=“0” maxOccurs=“unbounded”/> 
</xsd:sequence> 

は、JAXBはXSDで定義された要素の順序が同じではありませんXMLを読み取るために、このXSDを使用して取得するにはどのような方法があります:

は、あなたが含まXSDを持っていたと言いますか?

答えて

0

私はJAXBの完全な解決策を認識していません。

しかし、JAXBは、あなたがしたいのインスタンスをアンマーシャリングします

<xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element name="children" type="xs:string"/> <xs:element name="name" type="xs:string"/> </xs:choice> </xs:complexType>

のために結合し、それらを再度マーシャリングするときにそれらは安定して保持します。

欠点がある:

  • 対応するJavaクラスは、あなたがする必要がある(あなたがとにかく自分の名前の要素の位置を失うことになる場合)(入力された)一覧childrenOrName、ない2個々のプロパティ
  • を持っていますあなたのリストにちょうど1つの名前があることを手動でチェックしてください。
+0

リストが入力されたと言うとき、私はあなたが文字列として意味すると思いますか?要素の1つとして文字列の代わりに複雑な型(XSDファイルのどこかで定義された)を使用した場合、どうなるでしょうか?リストですか? – Zach

+0

上記の例では、xjcが@XmlElementRefsを生成するため、List >を取得します。これは、型(xs:string)だけではここで2つの可能な要素を区別するのに十分ではないためです。要素名も必要です。 "子"と "名前"の両方に複雑なタイプの "T1"を使用した場合(List >)、同じことが起こります。関係のない2つの複合型「T1」と「T2」を使用した場合、List要素(中間JAXBElementなし)としてT1とT2の直接インスタンスを持つリストが得られます。したがって、 "instance of"を使用して区別できます。 – Fabian

+0

(T1とT2の両方に共通のスーパータイプTがある場合は、リストとなります)。 – Fabian