18

I have an xml file and I show the small part of it, to show the content what I want

<media:content medium="image" url="http://msnbcmedia.msn.com/j/MSNBC/Components/Photo/_new/111010-romney-health-4p.thumb.jpg">
                <media:credit role="provider">Getty Images file</media:credit>
                <media:copyright>2010 Getty Images</media:copyright>
                <media:text><![CDATA[<p><a href="http://www.msnbc.msn.com/id/44854320/ns/politics-decision_2012/"><img align="left" border="0" src="http://msnbcmedia.msn.com/j/MSNBC/Components/Photo/_new/111010-romney-health-4p.thumb.jpg" alt="Mitt Romney speaks at the National Press Club March 5, 2010 in Washington, D.C." style="margin:0 5px 5px 0" /></a></p><br clear="all" />]]></media:text>
            </media:content>

Now I want to retrieve the URL tab. How I do this

I do the following code

if(parser.getName().equalsIgnoreCase("media:content"))
{
    Log.d("media count-->",parser.getAttributeCount()+"");
}       

So this gives me -1.

Hey if anyone give me hint for how i can get the image url.

Malwinder Singh
  • 6,644
  • 14
  • 65
  • 103
DEVANG SHARMA
  • 2,662
  • 5
  • 33
  • 52

2 Answers2

35

Call getAttributeValue like the following

parser.getAttributeValue(null, "url") 

inside of your if statement. Make sure getEventType() is equal to START_TAG since your current if statement will also evaluate to true when your parser is set to the END_TAG portion of your media:content (which would give you a -1 attribute count).

EDIT Since you are having so much trouble, I hope this little test function does what you want:

public void parseXml() throws XmlPullParserException, IOException
{
    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    XmlPullParser parser = factory.newPullParser();
    parser.setInput(new StringReader(
            "<media:content medium=\"image\" url=\"http://msnbcmedia.msn.com/j/MSNBC/Components/Photo/_new/111010-romney-health-4p.thumb.jpg\">"
                    + "<media:credit role=\"provider\">Getty Images file</media:credit>"
                    + "<media:copyright>2010 Getty Images</media:copyright>"
                    + "<media:text><![CDATA[<p><a href=\"http://www.msnbc.msn.com/id/44854320/ns/politics-decision_2012/\"><img align=\"left\" border=\"0\" src=\"http://msnbcmedia.msn.com/j/MSNBC/Components/Photo/_new/111010-romney-health-4p.thumb.jpg\" alt=\"Mitt Romney speaks at the National Press Club March 5, 2010 in Washington, D.C.\" style=\"margin:0 5px 5px 0\" /></a></p><br clear=\"all\" />]]></media:text>"
                    + "</media:content>"));

    while (!"media:content".equals(parser.getName()) && parser.getEventType() != XmlPullParser.START_TAG) {
        parser.next();
    }
    Log.d("media count -->", parser.getAttributeValue(null, "url"));
}
Justin Breitfeller
  • 13,737
  • 4
  • 39
  • 47
  • have you any other method to do it – DEVANG SHARMA Oct 11 '11 at 13:56
  • That's the correct method to do it. Did you change your if statement to also check the event type of the parser? Also, are you sure you are reading the correct XML? – Justin Breitfeller Oct 11 '11 at 14:15
  • This is one of the few cases where the order of the `equals()`is important. Make sure you use `"constant".equals(parser.getName())` instead of the other way around or you *will* get null pointer exceptions... – Gábor Jan 06 '15 at 23:56
3
private String readLink(XmlPullParser parser) throws IOException, XmlPullParserException {
    parser.require(XmlPullParser.START_TAG, ns, "enclosure");
    final String link = parser.getAttributeValue(null, "url");
    return link;
}

This works for me in android with XmlPullParser.

user7023213
  • 3,460
  • 2
  • 11
  • 15