JAVA - 将XML文档解组为对象

时间:2013-12-09 11:47:38

标签: java xml jaxb

我的问题与之前提出的问题相似,但事实是我还没能解决我的问题。 我有一个XML文档,我需要将其转换(解组)到一个对象,我正在使用JAXB注释。到目前为止,这么好,但有一个属性我无法从中获得价值。 让我编码而不是说话。

我的Java对象:

@XmlRootElement
public class Product {
    private String date_upd;
    private MetaDescription meta_description;

    //------------Static classes for sub nodes------------------
    @XmlAccessorType(XmlAccessType.FIELD)
    static class MetaDescription{
        private List<Language> language ;
    }

    @XmlAccessorType(XmlAccessType.FIELD)
    static class Language{
        @XmlAttribute(name="id")
        private String id;
        @XmlValue
        private String language = null;
        void setLanguage(String language){
            this.language = language;
        }
        String getLanguage(){
            return this.language;
        }
    }


     public String getDate_upd() {
        return date_upd;
    }

    /**
     * @param date_upd the date_upd to set
     */
    @XmlElement
    public void setDate_upd(String date_upd) {
        this.date_upd = date_upd;
    }

    /**
     * @return the meta_description
     */
    public MetaDescription getMeta_description() {
        return meta_description;
    }

    /**
     * @param meta_description the meta_description to set
     */
    @XmlElement
    public void setMeta_description(MetaDescription meta_description) {
        this.meta_description = meta_description;
    }

}

我的XML文档包含以下片段:

<product>
  <date_upd>
    <![CDATA[2013-12-06 18:03:59]]>
  </date_upd>
  <meta_description>
    <language id="1" xlink:href="http://demo1.it2care.com/shop/api/languages/1">
      <![CDATA[product1]]>
    </language>
    <language id="2" xlink:href="http://demo1.it2care.com/shop/api/languages/2">
      <![CDATA[produto1]]>
    </language>
  </meta_description>
</product>

它具有更多属性,但只有这些属性相关。 'date_upd'正确地被解组,但我无法解决'meta_description'问题。我在'MetaDescription'字段中获得了一个'Language'对象列表,但是我无法获得'Language'的值,尽管我从'language'节点得到了'id'attr。 对于呈现的XML示例,'meta_description'是具有2个元素的List。在两个列表元素中,“ID”已正确填充,但我从“语言”中获取“”,而不是“product1”。

任何提示家伙?非常感谢提前。

1 个答案:

答案 0 :(得分:0)

想想我明白了!因为我的节点里面有CDATA元素,所以我得到了语言。出于某种原因,我仍然想弄清楚,unmarshaller没有进入这些节点,因此返回一个空字符串。 我解决了问题的根源。将XML字符串从服务器转换为XML文档时,我添加了以下片段:

//Create a Document factory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//Line I added
factory.setCoalescing(true); //remove all CDATA wrappers

这解决了我的问题,使用我最初发布的结构。 希望这有帮助!