2012-12-11 40 views
0

首先相同XSD,我有一個包含以commentType對象引用一個XSD:訪問一個對象,它是不與JAXB

... 
<xs:complexType> 
    <xs:sequence> 
     <xs:element name="entry" type="ref:commentType"> 
... 

commentType被描述爲(相同XSD):

... 
<xs:complexType name="commentType" mixed="true"> 
    <xs:annotation> 
     <xs:documentation>Some text</xs:documentation> 
    </xs:annotation> 
    <xs:sequence minOccurs="0" maxOccurs="unbounded"> 
     <xs:any/> 
    </xs:sequence> 
    <xs:attribute name="date" type="xs:dateTime" use="required"/> 
    <xs:attribute name="type" use="optional" default="PRODUCT"> 
     <xs:simpleType> 
      <xs:restriction base="xs:token"> 
       <xs:enumeration value="PRODUCT"/> 
       <!--Several values--> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:attribute> 
</xs:complexType> 
... 

在我使用JAXB解析XML文件,入境是指opDetails對象,但是以另一種XSD定義...

... 
<entry date="2010-03-26T10:40:27Z" type="PRODUCT"> 
    <opDetails xmlns="http://path/to/opDetails"> 
     <!--Object properties--> 
    </opDetails> 
... 

(我已經到簡體的清晰度名稱和結構)

問題:

如何正確地映射在我的代碼這個其他對象?

我有一個entry.getContent(),它是一個TinyElementImpl的列表。

顯然,生成2級XSD的類和嘗試投放TinyElementImpl作爲opDetails是不是一種選擇:)

+0

你輸入你的 「主」 XSD中的其他XSD? –

+0

我試過了:

+0

這個(你的第一個代碼塊): ''doesn沒有這樣一個名字: '' 它是否在一個元素中,例如有一個名字?你是否正在使用可驗證xml的工具? –

回答

0

我已經找到了答案

和解組與節點太多工作。 http://docs.oracle.com/javaee/5/api/javax/xml/bind/Unmarshaller.html

我的代碼:

org.w3c.dom.Node nodeEntryContent = (org.w3c.dom.Node)entry.getContent().get(0); 

JAXBContext ctx; 
Unmarshaller um; 
opDetails dOp = null; 
try { 
    ctx = JAXBContext.newInstance("package.of.opDetails.containing.xjc.generated.classes"); 
    um = ctx.createUnmarshaller(); 
    dOp = (opDetails)um.unmarshal(nodeEntryContent); 
} catch (JAXBException e1) { 
    System.out.println("XML parsing error" + e1.getMessage()); 
}