当前位置: 首页 > 知识库问答 >
问题:

XmlPullParser是否需要对2.3.3和更早的Android版本进行特殊处理?

乐正宏深
2023-03-14

我通过XMLPullParser从远程XML文件提取内容,使用如下代码:

    factory = XmlPullParserFactory.newInstance();
    factory.setNamespaceAware(true);
    parser = factory.newPullParser();
    parser.setInput(xml, "UTF-8");

    eventType = parser.getEventType();

    // process tag while not reaching the end of document
    while (eventType != XmlPullParser.END_DOCUMENT) {
        switch (eventType) {
            // at start of document: START_DOCUMENT
            case XmlPullParser.START_DOCUMENT:
                break;
            // at start of a tag: START_TAG
            case XmlPullParser.START_TAG:
                //get tag name
                String tagName = parser.getName();
                if (tagName.equalsIgnoreCase("item")) {
                    listObject = new MyClass();
                } else if (tagName.equalsIgnoreCase("yy")) {
                    listObject.setYY(parser.nextText());
                } else if (tagName.equalsIgnoreCase("zz")) {
                    listObject.setZZ(parser.nextText());
                } 
                break;
        }
        // jump to next event
        eventType = parser.next();

正如您所看到的,这段代码中没有任何新的或奇怪的地方。

现在,在Android 3.0和更新的系统上,当获取的XML内容到达解析器时,它们看起来“正常”,就像下面的图片一样:

共有1个答案

曹和正
2023-03-14

修改解析:

XmlPullParser xpp = XmlPullParserFactory.newInstance().newPullParser();
xpp.setInput(xml, "UTF-8");

while (xpp.getEventType() != XmlPullParser.END_DOCUMENT)
{
    if (xpp.getEventType() == XmlPullParser.START_TAG)
    {
        if (xpp.getName().equalsIgnoreCase("item"))
        {
            listObject = new MyClass();
        }
        else if (xpp.getName().equalsIgnoreCase("yy"))
        {
            listObject.setYY(parser.nextText());
        }
        else if (xpp.getName().equalsIgnoreCase("zz"))
        {
            listObject.setZZ(parser.nextText());
        }
    }
    else if(xpp.getEventType() == XmlPullParser.END_TAG)
    {
        listObject = null;
    }
    xpp.next();
}
 类似资料:
  • 问题内容: 我使用Android Studio,最近收到错误消息: 错误:任务’:app:compileDebugJavaWithJavac’的执行失败。compileSdkVersion’android-24’需要JDK 1.8或更高版本进行编译。 但是我已经安装了JDK 1.8: :\ Users ..> java -version Java版本“ 1.8.0_91” Java(TM)SE运行

  • 我在datasource password字段中有特殊字符,如“(双引号)、@,~,!,%,&,},”。当我运行springboot应用程序时,当它试图连接到我遇到的数据库时- 我的问题是: (1)是否有方法查看Spring尝试连接时使用的密码? (2)是否需要转义中密码中的任何特殊字符? 我能够使用一个独立的java程序连接到数据库,但是我必须转义密码中的双引号。我在后端使用了SpringBoo

  • 在我在互联网上看到的大约一半的svg示例中,代码都是简单的

  • 根据我的头衔。几个月来,我一直在愉快地使用Eclipse,但现在它出现了问题(我认为这是因为我在SDK中添加了API 19)。 无论如何,我删除了SDK和Eclipse,并重新安装了它们。它们位于C:\Program Files(x86)中名为development的文件夹中,与Java文件相同。 所以我加载了Eclipse并且没有错误,所以我想我会更新SDK:Android SDK Tools

  • (环境:Windows 7 Eclipse) 当我在Android SDK Manager中更新时,我已经选择了所有SDK、平台、示例等。重启Eclipse后,当我尝试访问Android SDK Manager时,我收到了这条消息:android sdk的位置尚未在首选项中设置! 当我试图在窗口中定位SDK时- 我试图更新最新的ADT。它告诉我:无法完成请求。有关详细信息,请参阅错误日志。Andr

  • 如果按照单纯的赋值来看,要求变量数量和值的数量要一样,但是在 map 取键值时可以不一样,有点像 for range 循环中可以忽略其中的值。 go 是不是也对 map 集合的键值获取进行了特殊处理? 如果是有什么情况也使用了类似的特殊处理