[英]Is it possible to have JAXB ignore order of elements in a <sequence> when one or more elements is a list (maxOccurs=unbounded)?
[英]Unmarshalling maxOccurs unbounded elements having attributes through jaxb
我試圖解組符合以下xsd的xml響應(使用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或生成的類中存在一些問題。 請協助。
謝謝。
您的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>
文本節點將使用@XmlValue
映射到JAXB中。 有關更多信息,請參見:
我認為您的xml不符合您提供的架構。
<xsd:complexType name="strType">
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
那沒有提到子元素。 我認為您需要擴展xsd基本類型(xsd:string等)並添加一個屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.