Skip to content Skip to sidebar Skip to footer

Xmlpullparser - Get Data From Tag With Specific Attributevalue

I'm currently creating a parser for an XML-file and everything works fine until I add an extra option to retrieve a link. I have several tags of the same name and I want one specif

Solution 1:

Without the full stacktrace its hard to point the mistake. However the below works.

publicclassXMLPullParserHandler{

    private String text;

    public XMLPullParserHandler() {

    }
    publicVoid parse(InputStream is) { // pas the input stream
        XmlPullParserFactory factory = null;
        XmlPullParser parser = null;
        try {
            factory = XmlPullParserFactory.newInstance();
            factory.setNamespaceAware(true);
            parser = factory.newPullParser();

            parser.setInput(is, null);
            boolean check =false;

           //factory instantiates an object

            int eventType = parser.getEventType();
            while (eventType != XmlPullParser.END_DOCUMENT) {
                String tagname = parser.getName();
                switch (eventType) {
                case XmlPullParser.START_TAG:
                    if (tagname.equalsIgnoreCase("image")) {

                        if(parser.getAttributeValue(null, "size").equals("extralarge"))
                        {
                            check=true;
                        }

                    }


                    break;

                case XmlPullParser.TEXT:
                    text = parser.getText();
                    break;

                case XmlPullParser.END_TAG:
                          String val = null; 
                         if  (tagname.equalsIgnoreCase("name")) {

                             val=text;
                             Log.i(""," name is "+val);

                         } 
                         elseif (tagname.equalsIgnoreCase("mbid")) 
                         {

                             val=text;
                             Log.i(""," mbid is "+val);

                          } 
                         elseif (tagname.equalsIgnoreCase("url")) 
                         {

                             val=text;
                             Log.i(""," url is "+val);

                          } 
                         elseif (tagname.equalsIgnoreCase("image")) 
                         {

                             val=text;
                             if(check == true)
                             Log.i(""," image is "+val);

                          } 

                    break;

                default:
                    break;
                }
                eventType = parser.next();
            }

        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        returnnull;
    }
}

The log

04-2404:39:06.906: I/(1539):  name is Venom
04-2404:39:06.906: I/(1539):  mbid is5ddddef1-fd5a-4ca8-8e89-df4adff4239b
04-2404:39:06.916: I/(1539):  url is Venom
04-2404:39:06.916: I/(1539):  name is http://userserve-ak.last.fm/serve/252/35628151.png

Alternative Solution :

private TrackInfo readTrack(XmlPullParser parser)throws XmlPullParserException, IOException {
    parser.require(XmlPullParser.START_TAG, ns, "track");
    booleannowPlaying=false;
    Stringartist=null;
    StringartistPic=null;
    StringartistMbid=null;
    Stringsong=null;
    StringsongUrl=null;
    Stringalbum=null;
    StringalbumPic=null;
    intplayedUts=0;
    while (parser.next() != XmlPullParser.END_TAG) {
        if (parser.getEventType() != XmlPullParser.START_TAG) {
            continue;
        }
        Stringname= parser.getName();
        if (name.equals("artist")) {
            parser.require(XmlPullParser.START_TAG, ns, "artist");
            while (parser.next() != XmlPullParser.END_TAG) {
                if (parser.getEventType() != XmlPullParser.START_TAG) {
                    continue;
                }
                StringartistName= parser.getName();
                if (artistName.equals("name")) {
                    artist = readArtist(parser);
                } elseif (artistName.equals("mbid")) {
                    artistMbid = readArtistMbid(parser);
                } elseif (artistName.equals("image")) {
                    booleancheck=false;
                    Stringimagesize= parser.getAttributeValue(null, "size");
                    if (imagesize.equals("extralarge")) {
                        check = true;
                    }
                    if (check) {
                        artistPic = readArtistPic(parser);
                    } else {
                        parser.nextText();
                    }
                } else {
                    skip(parser);
                }
            }
        } elseif (name.equals("name")) {
            song = readSong(parser);
        } elseif (name.equals("url")) {
            songUrl = readSongUrl(parser);
        } elseif (name.equals("album")) {
            album = readAlbum(parser);
        } elseif (name.equals("date")) {
            playedUts = Integer.parseInt(readUts(parser));
        } else {
            skip(parser);
        }
    }
    returnnewTrackInfo(nowPlaying, artist, artistPic, artistMbid, song, songUrl,
            album, albumPic, playedUts);
}

...

private String readArtistPic(XmlPullParser parser)throws XmlPullParserException, IOException {
    parser.require(XmlPullParser.START_TAG, ns, "image");
    StringartistPic= readText(parser);
    parser.require(XmlPullParser.END_TAG, ns, "image");
    return artistPic;
}

...

Post a Comment for "Xmlpullparser - Get Data From Tag With Specific Attributevalue"