2011-10-20 24 views
1

我想組XML具有響應屬性解組的maxOccurs無限元素(與JAXB解析)符合以下XSD:通過JAXB

<?xml version="1.0" encoding="utf-16"?> 
<xsd:schema version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="response" type="responseType" /> 
    <xsd:complexType name="responseType"> 
    <xsd:sequence> 
     <xsd:element name="result" type="resultType" /> 
    </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="resultType"> 
    <xsd:sequence> 
     <xsd:element maxOccurs="unbounded" name="doc" type="docType" /> 
    </xsd:sequence> 
    <xsd:attribute name="start" type="xsd:int" /> 
    </xsd:complexType> 
    <xsd:complexType name="docType"> 
    <xsd:sequence> 
     <xsd:element minOccurs="1" name="int" type="intType" maxOccurs="unbounded" /> 
     <xsd:element maxOccurs="unbounded" minOccurs="1" name="str" type="strType" /> 
     <xsd:element name="float" type="floatType" /> 
     <xsd:element maxOccurs="unbounded" minOccurs="1" name="long" type="longType" /> 
     <xsd:element name="date" type="dateType" />  
    </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="dateType"> 
      <xsd:attribute name="name" type="xsd:string" /> 
    </xsd:complexType> 
    <xsd:complexType name="longType"> 
    <xsd:attribute name="name" type="xsd:string" /> 
    </xsd:complexType> 
    <xsd:complexType name="floatType"> 
    <xsd:attribute name="name" type="xsd:string" /> 
    </xsd:complexType> 
    <xsd:complexType name="strType"> 
    <xsd:attribute name="name" type="xsd:string" /> 
    </xsd:complexType> 
    <xsd:complexType name="intType"> 
    <xsd:attribute name="name" type="xsd:string" /> 
    </xsd:complexType> 
</xsd:schema> 

我已經成功地使用XJC工具還生成的類。 但是,我無法獲取所有maxoccurs無界元素的文本:int,str,long節點。 因爲這些元素是無界的,所以我通過生成類中的方法獲得ArrayList類型的這些元素的列表。而且,一種獲取屬性值的方法。 但生成的類不提供獲取文本節點值的方法。

對於例如:如果我的回答是:

<response> 
<result start="0"> 
<doc> 
    <int name="age">0</int> 
    <str name="continent">EU</str> 
    <str name="country">United Kingdom</str> 
    <float name="influence">7.0</float> 
    <int name="classified">0</int> 
    <date name="createdOnGMTDate">2011-10-12T08:11:07Z</date> 
    <int name="favCnt">41</int> 
    <long name="id">120493600</long> 
    <long name="inReplyToId">-1</long> 
    <str name="isBookmarked">False</str> 
    <str name="lang">english</str> 
    <str name="language">english.lm</str> 
    <int name="listedCnt">6</int> 
    <str name="name">john doe</str> 
    <str name="screenName">john_d</str> 
    <int name="sentiment">-1</int> 
    <str name="timeZone">London</str> 
    <str name="Text">Yeah gee got flashed in the W.C.....</str> 
    <str name="usrCrtDate">2011-10-12 08:11:07</str> 
    </doc> 
<result> 
<response> 

然後,我能夠檢索像大陸,國家但不是產品的各個節點值歐盟,英國的屬性名稱。

我認爲在我的xsd或生成的類中存在一些問題。請協助。

謝謝。

回答

0

我不認爲你的XML符合你提供的模式。

<xsd:complexType name="strType"> 
    <xsd:attribute name="name" type="xsd:string" /> 
    </xsd:complexType> 

這並沒有提到任何子元素。我認爲你需要擴展xsd基本類型(xsd:string等)並添加一個屬性。

1

XML模式應該類似於下面的同時捕獲的屬性和文本值:

<xsd:complexType name="floatType"> 
    <xsd:simpleContent> 
     <xsd:extension base="xsd:float"> 
      <xsd:attribute name="name" type="xsd:string" /> 
     </xsd:extension 
    </xsd:simpleContent> 
    </xsd:complexType> 

的文本節點將JAXB與@XmlValue映射。欲瞭解更多信息,請參閱: