mardi 4 août 2015

SimpleXML: Read XML with namespace

I'm try to read XML using SimpleXML. I am unable to get galleryitems.

XML I'm reading:

<rss xmlns:webportal="http://ift.tt/1SZsB0X" version="2.0">
  <channel>
    <item>
      <webportal:galleryitems>
        <galleryitem>
          <webportal:name>
            <![CDATA[ ECA letter 01 ]]>
          </webportal:name>
        </galleryitem>
        <galleryitem>
          <webportal:name>
            <![CDATA[ ECA letter 01 ]]>
          </webportal:name>
        </galleryitem>
      </webportal:galleryitems>
    </item>
    <item>
      <webportal:galleryitems>
        <galleryitem>
          <webportal:name>
            <![CDATA[ ECA letter 01 ]]>
          </webportal:name>
        </galleryitem>
        <galleryitem>
          <webportal:name>
            <![CDATA[ ECA letter 01 ]]>
          </webportal:name>
        </galleryitem>
      </webportal:galleryitems>
    </item>
  </channel>
</rss>

java classes:

@Root(name = "rss", strict = false)
@Namespace(reference = "http://ift.tt/1SZsB0X", prefix = "webportal")
public class Rss {
    @Element(required = false)
    @Namespace(reference = "http://ift.tt/1SZsB0X", prefix = "webportal")
    private Channel channel;

    public Channel getChannel ()
    {
        return channel;
    }

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

@Root(name = "channel", strict = false)
@Namespace(reference = "http://ift.tt/1SZsB0X", prefix = "webportal")
public class Channel {

    @ElementList(required = false, inline = true)
    @Namespace(reference = "http://ift.tt/1SZsB0X", prefix = "webportal")
    private ArrayList<Item> item;

    public ArrayList<Item> getItem() {
        return item;
    }

    public void setItem(ArrayList<Item> item) {
        this.item = item;
    }

}

@Root(name = "item", strict = false)
@Namespace(reference = "http://ift.tt/1SZsB0X", prefix = "webportal")
public class Item {
    @ElementList(inline = true, required = false)
    @Namespace(reference = "http://ift.tt/1SZsB0X", prefix = "webportal")
    ArrayList<Galleryitem> galleryitems ;

    public ArrayList<Galleryitem> getGalleryitems() {
        return galleryitems;
    }

    public void setGalleryitems(ArrayList<Galleryitem> galleryitems) {
        this.galleryitems = galleryitems;
    }
}

@Root(name = "galleryitem", strict = false)
@Namespace(reference = "http://ift.tt/1SZsB0X", prefix = "webportal")
public class Galleryitem {
    @Element(required = false)
    @Namespace
    private String name;
public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

the way i using it:

Rss rss = serializer.read(Rss.class, cleanedResponse);

all variable in Rss class return except galleryitems

What is the correct way to parse this using SimpleXML?

Aucun commentaire:

Enregistrer un commentaire