2015-10-29 63 views
-1

我對Java非常陌生。我有一個xsd,我需要基於xsd創建xml。我看到我們可以使用JAXB來完成這些工作。但是我看到了本質上很簡單的xml示例。我有一個示例xsd,如下所示,我需要轉換爲xml。使用Java從XSD創建XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
    <xs:schema xmlns:addml="http://www.arkivverket.no/standarder/addml" 
     xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     targetNamespace="http://www.arkivverket.no/standarder/addml" elementFormDefault="qualified" 
     version="8.2"> 
     <xs:annotation> 
     <xs:documentation xml:lang="en"> 
      Changes made in versions up to 8.2 are not documented in this document. 
      Updated 2014-08-15 and 2014-09-29, Terje Pettersen-Dahl: 
      Version 8.3: 
      1. Element reference in dataset made optional. 
      2. Optional possibility for header-lines. 
      3. FieldDefinitionReference made unique within an instance. 
      4. Created this documentation section. 

     </xs:documentation> 
     </xs:annotation> 
     <xs:element name="addml"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element ref="addml:objectStore" maxOccurs="1"/> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
     <xs:element name="objectStore"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element ref="addml:folder" minOccurs="0"/> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
     <xs:element name="folder"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element ref="addml:folderProperties" minOccurs="0"/> 
      <xs:element ref="addml:documents" minOccurs="0"/> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
     <xs:element name="documents"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element name="document" maxOccurs="unbounded" minOccurs="2"> 
       <xs:complexType> 
       <xs:sequence> 
        <xs:element ref="addml:docProperties"/> 
       </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
     <xs:element name="docProperties"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element name="documentId" type="xs:string"/> 
      <xs:element name="documentTitle" type="xs:string"/> 
      <xs:element name="dateCreated" type="xs:string"/> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
     <xs:element name="folderProperties"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element name="documentId" type="xs:string"/> 
      <xs:element name="documentTitle" type="xs:string"/> 
      <xs:element name="dateCreated" type="xs:string"/> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
    </xs:schema> 

    <?xml version="1.0" encoding="utf-8"?> 
    <addml> 
     <objectStore> 
     <folder> 
      <folderProperties> 
      <documentId>str1234</documentId> 
      <documentTitle>str1234</documentTitle> 
      <dateCreated>str1234</dateCreated> 
      </folderProperties> 
      <documents> 
      <document> 
       <docProperties> 
       <documentId>str1234</documentId> 
       <documentTitle>str1234</documentTitle> 
       <dateCreated>str1234</dateCreated> 
       </docProperties> 
      </document> 
      <document> 
       <docProperties> 
       <documentId>str1234</documentId> 
       <documentTitle>str1234</documentTitle> 
       <dateCreated>str1234</dateCreated> 
       </docProperties> 
      </document> 
      </documents> 
     </folder> 
     </objectStore> 
     </addml> 

我需要像上面這樣的XML。注意:我使用在線轉換器獲得了下面的XML。

請幫助使用Java創建xml。任何幫助深表感謝。 謝謝,馬克

+1

到目前爲止你做了什麼,你卡在哪裏? StackOverflow不是一個代碼(或XML)寫作服務;你需要提出具體和可回答的問題。 –

+0

嗨Erwin,我對Java非常陌生。我需要關於如何從xsd創建一個xml的輸入。我已經使用JAXB爲示例xsd創建了一個xml。在上面的例子中,標籤是重複元素,也是動態的。有時我可能有時會得到3個元素5.所以我需要知道如何實現這種行爲。謝謝 – user1194310

+1

我想你會以錯誤的方式去做。您不能從XSD文件創建XML文檔(至少不是有意義的文檔)。您需要從要用XML編碼的數據開始,在創建該XML時,需要確保它滿足架構。如果您使用JAXB,它已經可以幫助您,因爲它只具有XSD中元素和屬性的Java屬性。 –

回答

1

你叫

xjc sample.xsd 

,它會產生,在文件夾中沒有/ arkivverket /更加規範/ addml /一組該包中的Java源文件,您可以使用它創建一組表示您想要序列化(「編組」)XML數據到XML文件的XML數據的對象。

最後,您需要幾行Java代碼來調用JAXBContext.newInstance,創建一個Marshaller並調用它的方法元帥。

Google for JAXB tutorials。