Разбор XML-документа с такими элементами, какиспользуя JAXB - PullRequest
0 голосов
/ 20 октября 2018
<?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-данных, возвращаютсяпустой .....

1 Ответ

0 голосов
/ 20 октября 2018

Ваши Rss и Channel классы выглядят хорошо для меня.Проблема в вашем классе Item, особенно в его элементах с пространствами имен.

Для моделирования элемента <g:id> вы не должны использовать @XmlElement(name = "g:id").Вместо этого вам нужно использовать @XmlElement(name = "id", namespace = "http://base.google.com/ns/1.0").Это соответствует определению пространства имен xmlns:g="http://base.google.com/ns/1.0", данному в файле XML.

И, кстати: вам не нужен @XmlRootElement в классе Item.Он нужен только для класса 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)
} 

Вы можете найти большеСправочная информация здесь:

...