2012-03-31 20 views
0

jaxbを使用してxmlでインラインスキーマを追加する方法はありますか?スキーマを追加する必要があることを意味します。jaxbを使用してインラインスキーマを追加する方法はありますか

<transaction> 
    <xs:schema id="transaction" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
    <xs:element name="transaction" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
     <xs:complexType> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
      <xs:element name="id"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="in" type="xs:string" minOccurs="0" /> 
       <xs:element name="sn" type="xs:string" minOccurs="0" /> 
       <xs:element name="book" type="xs:string" minOccurs="0" /> 
       <xs:element name="author" type="xs:string" minOccurs="0" /> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
      <xs:element name="data"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="dateTime" type="xs:dateTime" minOccurs="0" /> 
       <xs:element name="key" type="xs:string" minOccurs="0" /> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
      <xs:element name="productData"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="dateTime" type="xs:dateTime" minOccurs="0" /> 
       <xs:element name="key" type="xs:string" minOccurs="0" /> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
     </xs:choice> 
     </xs:complexType> 
    </xs:element> 
    </xs:schema> 
    <id> 
    <in>computer</in> 
    <sn>1234567</sn> 
    <book>JAVA</book> 
    <author>klen</author> 
    </id> 
    <data> 
    <dateTime>2011-06-24T17:08:36.3727674+05:30</dateTime> 
    <key>Err</key> 
    </data> 
</transaction> 

の下に与えられたとして、私は唯一の

<transaction> 
     <id> 
     <in>abcd</in> 
     <sn>1234567</sn> 
     <book>computer</book> 
     <author>klen</author> 
     </id> 
     <data> 
     <dateTime>2011-06-24T17:08:36.3727674+05:30</dateTime> 
     <key>Err</key> 
     </data> 
</transaction> 

のようなxmlファイルの外観を生成することができますが、XMLであると私は、インラインXMLSCHEMAを追加することはできません。私のXML生成コードは次のようになります

 JAXBContext jaxbContext = JAXBContext.newInstance(Transaction.class); 
     Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 
    jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true); 
     jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT,true); 
    jaxbMarshaller.marshal(transaction, file); 
    jaxbMarshaller.marshal(transaction, System.out); 

答えて

1

私は質問に何か迷っていますが、次の2行を書くのを妨げる原因は何ですか?

Document trxDoc = .....; // this is what you have after marshalling 
Document schemaDoc = .....; // this is your Schema document 

Node schemaNode = trxDoc.importNode(schemaDoc.getDocumentElement(), true); 
trxDoc.getDocumentElement().appendChild(schemaNode); 

ここでは、DOMノードにスキーマドキュメントとマーシャリングオブジェクトがあると仮定します。

+0

簡単に説明できますが、私はJavaで新しくて説明できませんのでご説明ください。 – saba

+0

私はあなたのコードごとに文書をマーシャリングするコードを追加しました。DOMパーサーを使用してxmlを作成しましたが、完全にjaxb.isを使用して試してみたいと思いますか? – saba

+1

@saba、http://docs.oracle.com/javase/6/docs/api/javax/xml/bind/Marshaller.htmlを参照してください。DOMノードにマーシャリングする方法の例があります。結果として、あなたのトランザクションのDOM表現(私のテキストに 'trxDoc')があります。次に、スキーマ文書のルート要素を新しく作成したトランザクション文書にインポートします。 – Osw

関連する問題