【问题标题】:Parse XML document with elements like <g:id> using JAXB使用 JAXB 解析带有 <g:id> 等元素的 XML 文档
【发布时间】:2019-03-25 03:17:20
【问题描述】:
<?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;
     }

最后一个项目类是

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 中提取的所有值都返回 null.....

【问题讨论】:

  • 我写了一个实现,但是它为提取的元素提供了空值
  • 你应该展示你的实现,以便有人能发现你的错误。
  • 抱歉忘记添加时间了...

标签: java xml jaxb xml-namespaces


【解决方案1】:

您的 RssChannel 课程对我来说看起来不错。 问题出在您的 Item 类中,尤其是在其带有命名空间的元素中。

对于&lt;g:id&gt; 元素建模,您不能使用@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 不需要 Item 类。 您只需要在 Rss 类上使用它,因为 &lt;rss&gt; 是 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)
} 

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

【讨论】:

  • 如果您将链接发给我以了解所有这些细节......那么这对我很有帮助......
  • @NaveenKushwaha 为我的答案添加了一些链接
猜你喜欢
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 2012-12-25
相关资源
最近更新 更多