Analyzovat XML dokument s prvky, jako jsou <g: id> pomocí JAXB

hlasů
1
<?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>

To je ukázka xml soubor, který chci číst a analyzovat ....

Mám java tříd takhle ....

 @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;
     }

}

Další tercie je

@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;
     }

a třída poslední položka

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;
    }
}

To je to, co se snažím do..please pomoci co dělám špatně, když jsem všechny hodnoty extrahují z xml vrátí null .....

Položena 20/10/2018 v 12:42
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
1

Váš Rssa Channeltřídy vypadat OK ke mně. Problém je ve své Itemtřídě, a to zejména v jeho prvků s jmenných prostorů.

Pro modelování <g:id>prvek, který se nesmí používat @XmlElement(name = "g:id"). Místo toho je třeba použít @XmlElement(name = "id", namespace = "http://base.google.com/ns/1.0"). To odpovídá definici jmenného prostoru xmlns:g="http://base.google.com/ns/1.0"uvedeného v souboru XML.

A mimochodem: Nepotřebujete @XmlRootElementna Itemtřídě. Musíte ho pouze na Rsstřídu, protože <rss>je kořenový XML element.

Kompletní Itemtřída bude vypadat takto:

@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)
} 

Můžete si najít více informací na pozadí zde:

Odpovězeno 20/10/2018 v 13:59
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more