gpt4 book ai didi

java - 通过 jaxb 解码具有属性的 maxOccurs 无界元素

转载 作者:太空宇宙 更新时间:2023-11-04 08:29:21 24 4
gpt4 key购买 nike

我正在尝试解码符合以下 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 工具成功生成了类。但是,我无法获取所有最大出现无界元素的文本: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>

然后,我能够检索诸如大陆、国家之类的属性名称,但不能分别检索其节点值 EU、United Kingdom。

我认为我的 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>

文本节点将在 JAXB 中使用 @XmlValue 进行映射。欲了解更多信息,请参阅:

关于java - 通过 jaxb 解码具有属性的 maxOccurs 无界元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7833991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com