首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用JAXB将XML字符串解组为Java对象

使用JAXB将XML字符串解组为Java对象
EN

Stack Overflow用户
提问于 2018-10-08 20:44:58
回答 1查看 80关注 0票数 0

我想使用JAXB将下面的XML字符串转换为Java对象。

我可以转换对象,但是解组后documents会变成nullResult [hits=1, tookInMillis=10, totalHits=1, documents=null]如何纠正documents对象以获取值?

XML字符串:

代码语言:javascript
复制
<result hits="1" tookInMillis="9" totalHits="1" xmlns="http://www.example.com/search/result/1.0">
   <documents>
      <document id="1" company="TEST" type="CN" generationDate="2018-05-24T06:05:37.000Z">
         <field type="xs:string" name="test1">test1</field>
         <field type="xs:string" name="test2">test2</field>
         <field type="xs:string" name="test3">test3</field>
         <field type="xs:string" name="test4">test4</field>
         <field type="xs:string" name="test5">test5</field>
         <field type="xs:string" name="test6">test6</field>
         <field type="xs:string" name="test7">test7</field>
         <field type="xs:string" name="test8">test8</field>
         <field type="xs:date" name="date">2018-05-23</field>
      </document>
   </documents>
</result>
EN

回答 1

Stack Overflow用户

发布于 2018-10-09 02:39:11

您需要小心使用XML名称空间。

在XML中,XML元素(如<result>)中给定的名称空间继承其子元素(<documents><document><field>)。

在Java中则不是这样。因此,您需要在子属性的@XmlElement@XmlElementWrapper注释中显式地指定名称空间。

在解组XML示例时,以下Java类可以很好地工作。特别是,集合Result.documentsDocument.fields不是以null形式出现的。

代码语言:javascript
复制
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "result", namespace = "http://www.example.com/search/result/1.0")
public class Result {

    @XmlAttribute
    private int hits;

    @XmlAttribute
    private int tookInMillis;

    @XmlAttribute
    private int totalHits;

    @XmlElementWrapper(name = "documents", namespace = "http://www.example.com/search/result/1.0")
    @XmlElement(name = "document", namespace = "http://www.example.com/search/result/1.0")
    private List<Document> documents;

    // ... public getters and setters (omitted for brevity)
}
代码语言:javascript
复制
@XmlAccessorType(XmlAccessType.FIELD)
public class Document {

    @XmlAttribute
    private int id;

    @XmlAttribute
    private String company;

    @XmlAttribute
    private String type;

    @XmlAttribute
    private Date generationDate;

    @XmlElement(name = "field", namespace = "http://www.example.com/search/result/1.0")
    private List<Field> fields;

    // ... public getters and setters (omitted for brevity)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52702635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档