Parse XML-Dokument mit Elementen wie <g: id> mit JAXB

stimmen
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>

Dies ist ein Beispiel XML-Datei, die ich lesen und analysieren will ....

Ich habe Java-Klassen wie folgt ....

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

}

Ein weiterer classs ist

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

und der letzte Punkt Klasse

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

das ist, was ich do..please versuchen zu helfen, was ich falsch mache, wie ich alle extrahierten Werte aus der XML-null zurück .....

Veröffentlicht am 20/10/2018 um 12:42
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

Ihre Rssund ChannelKlassen aussehen OK für mich. Das Problem ist in Ihrer ItemKlasse, vor allem in seinen Elementen mit Namensräumen.

Für die Modellierung <g:id>Element , das Sie nicht verwenden müssen @XmlElement(name = "g:id"). Stattdessen müssen Sie verwenden @XmlElement(name = "id", namespace = "http://base.google.com/ns/1.0"). Dies entspricht die Namespace - Definition xmlns:g="http://base.google.com/ns/1.0"in der XML - Datei angegeben.

Und übrigens: Sie brauchen nicht @XmlRootElementauf die ItemKlasse. Sie müssen es nur auf der RssKlasse , weil <rss>das Element XML - Wurzel ist.

Die komplette ItemKlasse würde wie folgt aussehen:

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

Sie können mehr Hintergrundinformationen finden Sie hier:

Beantwortet am 20/10/2018 um 13:59
quelle vom benutzer

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