Android 如何使用XMLPull解析器获取属性

Android 如何使用XMLPull解析器获取属性,android,xml-parsing,android-xmlpullparser,Android,Xml Parsing,Android Xmlpullparser,我有一个xml文件,我显示了它的一小部分,以显示我想要的内容 <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

我有一个xml文件,我显示了它的一小部分,以显示我想要的内容

<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>
这给了我-1

嘿,如果有人给我提示如何获取图像url。

请按以下方式呼叫

parser.getAttributeValue(null, "url") 
在你的if语句里面。确保
getEventType()
等于START_标记,因为当解析器设置为media:content的END_标记部分时,当前if语句的计算结果也将为true(这将为您提供一个-1属性计数)

编辑 既然您遇到了这么多麻烦,我希望这个小测试函数能够满足您的需求:

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"));
}
public void parseXml()抛出XmlPullParserException,IOException
{
XmlPullParserFactory工厂=XmlPullParserFactory.newInstance();
XmlPullParser=factory.newPullParser();
setInput(新的StringReader(
""
+“Getty图像文件”
+“2010盖蒂图片”
+“


]>” + "")); 而(!“media:content”.equals(parser.getName())和&parser.getEventType()!=XmlPullParser.START_标记){ parser.next(); } Log.d(“媒体计数-->”,parser.getAttributeValue(null,“url”); }

这对我在android中使用XmlPullParser很有效。

你有其他方法吗?这是正确的方法。您是否将if语句更改为同时检查解析器的事件类型?另外,您确定读取的是正确的XML吗?
equals()
的顺序非常重要,这是少数几种情况之一。请确保使用
“constant”.equals(parser.getName())
,而不是相反的方法,否则会出现空指针异常。。。
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"));
}
private String readLink(XmlPullParser parser) throws IOException, XmlPullParserException {
    parser.require(XmlPullParser.START_TAG, ns, "enclosure");
    final String link = parser.getAttributeValue(null, "url");
    return link;
}