2017-12-13 3 views
1

답변을 찾을 수 없습니다. <all> 태그는 답변이 아닙니다. 하위 요소를 maxOccurs=“1”으로 제한합니다.하나 이상의 요소가 목록 일 때 (maxOccurs = unbounded) JAXB에서 <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>

바인딩 및 다시 마샬링 할 때 그들을 안정 유지합니다.

단점은 다음과 같습니다

  • 대응하는 자바 클래스가 (입력) 목록 childrenOrName, (어쨌든 당신의 이름 요소의 위치를 ​​잃어 버릴 것이다 경우)하지 두 개의 개별 속성
  • 당신은 할 필요가있다 목록에 정확히 하나의 이름이 있음을 수동으로 확인하십시오.
+0

목록을 입력했다고 말하면 나는 문자열이라고 생각합니까? 요소 대신 문자열을 사용하는 대신 복잡한 유형 (XSD 파일의 어딘가에서 정의)을 사용하면 어떻게됩니까? List 이 될까요? – Zach

+0

위의 예제에서 xjc가 @XmlElementRefs를 생성하므로 List >을 얻을 수 있습니다. 이것은 유형 (xs : string)만으로 두 개의 가능한 요소를 구별하기에 충분하지 않기 때문에 발생합니다. 요소 이름도 필요합니다. "어린이"와 "이름"모두에 복합 유형 "T1"을 사용하면 (List >) 동일한 결과가 발생합니다. 관련이없는 서로 다른 두 개의 복합 유형 "T1"과 "T2"를 사용한 경우 T1 및 T2의 직접 인스턴스가 목록 요소 (중간 JAXBElement 없음) 인 List 을 얻을 수 있습니다. 따라서 "instance of"를 사용하여 구별 할 수 있습니다. – Fabian

+0

(T1 및 T2에 대해 공통 상위 유형 T가있는 경우 List 이됩니다.) – Fabian

관련 문제