2
我使用JAXB將XSD模式綁定到POCO。我已經嘗試兩種不同的方式來寫XSD架構但每個有一個缺陷:使用xsd:序列的醜陋java代碼
選項1問題:每個元素被表示在XML而不是<Element>
<Elements>
,再加上它們不是一個容器,例如內部<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>
的Java
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>
的Java
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>
問題:有沒有一種方法可以編寫輸出XML的模式,如選項2和其代碼寫入如選項1?
編輯:<xs:list>
不是一個選項,因爲元素可能有空格。
我從架構開始。我不希望每次從模式生成POCO時都要更改代碼。 – mostruash 2013-03-14 20:16:16
@mostruash - 我已經用可能有幫助的鏈接更新了我的答案。 – 2013-03-14 20:19:15
感謝您的簡潔回答。然而,這個解決方案似乎並沒有產生一個XML,其中''標籤位於''內。仔細想想,如果不爲POCO自動生成自定義吸氣器,則可能無法這樣做。 –
mostruash
2013-03-14 20:27:52