How I get Attribute using by XMLPull parser
Asked Answered
B

2

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.

Blueweed answered 11/10, 2011 at 12:46 Comment(0)
S
36

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"));
}
Subminiature answered 11/10, 2011 at 13:36 Comment(3)
have you any other method to do itBlueweed
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?Subminiature
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...Oatis
E
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.

Elephant answered 24/1, 2017 at 0:49 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.