使用JAXB解析包含<g:id>等元素的XML文档

Parse XML document with elements like lt;g:idgt; using JAXB(使用JAXB解析包含lt;g:idgt;等元素的XML文档)

本文介绍了使用JAXB解析包含<g:id>等元素的XML文档的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

<?xml version="1.0"?>
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
  <channel>
    <title>SSS Product Feed</title>
    <link>https://en-ae.sssports.com/</link>
    <description><![CDATA[The largest sports ]]></description>
    <item>
      <g:id>NIKE315122-001</g:id>
      <g:title><![CDATA[Nike Air Force 1 Low 07 Shoe]]></g:title> 
      <g:sport>Lifestyle</g:sport>
    </item>
    <item>
      <g:id>NIKE315122-002</g:id>
      <g:title><![CDATA[Nike Air Force 1 Low 07 Shoe]]></g:title> 
      <g:sport>Lifestyle</g:sport>
    </item>
  </channel>
</rss>

这是我要读取和分析的示例XML文件...

我有这样的Java类...

 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
 public class Rss {


     @XmlElement(name="channel")
     private Channel channel;


     public Channel getChannel() {
         return channel;
     }

     public void setChannel(Channel channel) {
         this.channel = channel;
     }

}

另一个类是

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="item")
public class Item {

     @XmlElement(name="g:id")
     private String id;


     public String getId() {
         return id;
     }
     public void setId(String id) {
         this.id = id;
     }

,最后一个Item类是

public class Channel {


    private List<Item> itemList;

    @XmlElement(name="item")
    public List<Item> getItemList() {
        return itemList;
    }

    public void setItemList(List<Item> itemList) {
        this.itemList = itemList;
    }
}

这就是我正在尝试做的事情..请帮助我做错了什么,因为我从XML中提取的所有值都返回空.....

推荐答案

您的RssChannel类在我看来还可以。 问题出在Item类中,尤其是其具有命名空间的元素中。

<g:id>元素建模时,不得使用@XmlElement(name = "g:id")。 相反,您需要使用@XmlElement(name = "id", namespace = "http://base.google.com/ns/1.0")。 这与XML文件中给定的命名空间定义xmlns:g="http://base.google.com/ns/1.0"相对应。

顺便说一句:@XmlRootElement类上不需要@XmlRootElement。 您只需要在Rss类上使用它,因为<rss>是XML根元素。

完整的Item类如下所示:

@XmlAccessorType(XmlAccessType.FIELD)
public class Item {

    @XmlElement(name = "id", namespace = "http://base.google.com/ns/1.0")
    private String id;

    @XmlElement(name = "title", namespace = "http://base.google.com/ns/1.0")
    private String title;

    @XmlElement(name = "sport", namespace = "http://base.google.com/ns/1.0")
    private String sport;

    // public getters and setters (omitted here for brevity)
} 

您可以在此处找到更多背景信息:

  • XML Namespaces大体
  • OracleJAXB tutorial一般用于JAXB
  • @Xml... annotations的Javadoc
  • 有关更多信息,只需在Internet上搜索JAXB教程命名空间

这篇关于使用JAXB解析包含&lt;g:id&gt;等元素的XML文档的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:使用JAXB解析包含&lt;g:id&gt;等元素的XML文档