java - 在 Android 中使用 XMLPullParser 的 XML 嵌套标签有困难

标签 java android xml nested xmlpullparser

我正在尝试获取名称并读取 type="alpha"。

我是初学者,英语不是我的母语,请原谅。我已经阅读了有关 DOM、SAX、Simple、其他 StackOverflow 帖子和其他示例的信息,但我不理解并且想在这种情况下了解 XMLPullParser。

下面的示例 XML:

<feed>
    <title>Title</title>
    <item>

    <entry>
        <name>Name1</name>
        <record date="20001231">
            <reading type="alpha" value="100"/>
            <reading type="beta" value="200"/>
        </record>
    </entry>

    <entry>
        <name>Name2</name>
        <record date="20001231">
            <reading type="alpha" value="300"/>
            <reading type="beta" value="400"/>
        </record>
    </entry>

    </item>
</feed>

我读过这个:http://developer.android.com/training/basics/network-ops/xml.html 示例代码适用于上面没有 标签的示例 XML 以获取名称和记录日期。

private List<Entry> readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
    List<Entry> entries = new ArrayList<Entry>();

    parser.require(XmlPullParser.START_TAG, ns, "feed");
    while (parser.next() != XmlPullParser.END_TAG) {
        if (parser.getEventType() != XmlPullParser.START_TAG) {
            continue;
        }

        if (parser.getName().equals("entry")) {
            entries.add(readEntry(parser));
        } else {
            skip(parser);
        }
    }
    return entries;
}

我尝试使用 标签(但不起作用)是:

private List<Entry> readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
    List<Entry> entries = new ArrayList<Entry>();

    parser.require(XmlPullParser.START_TAG, ns, "feed");
    while (parser.next() != XmlPullParser.END_TAG) {
        if (parser.getEventType() != XmlPullParser.START_TAG) {
            continue;
        }

        if (parser.getName().equals("item")) {

            parser.next();

            while (parser.next() != XmlPullParser.END_TAG) {
                if (parser.getEventType() != XmlPullParser.START_TAG) {
                    continue;
                }

                if (parser.getName().equals("entry")) {
                    entries.add(readEntry(parser));
                } else {
                    skip(parser);
                }
            }

        } else {
            skip(parser);
        }
    }
    return entries;
}

如果我能解决这个问题,我将能够读取姓名和记录日期,但我想要获取的是姓名reading type="alpha",我不知道如何获取嵌套阅读类型="alpha"。

非常感谢。

最佳答案

你可以试试这个功能

 private List readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
    List entries = new ArrayList();

    parser.require(XmlPullParser.START_TAG, ns, "feed");
    while (parser.next() != XmlPullParser.END_TAG) {
        if (parser.getEventType() != XmlPullParser.START_TAG) {
            continue;
        }
        String name = parser.getName();
        // Starts by looking for the item tag
        if (name.equals("item")) {
            parser.require(XmlPullParser.START_TAG, ns, "item");
            while (parser.next() != XmlPullParser.END_TAG) {
                if (parser.getEventType() != XmlPullParser.START_TAG) {
                    continue;
                }
                // and then get the entry here
                if (name.equals("entry")) {
                    entries.add(readEntry(parser));
                }
            }
        } else {
            skip(parser);
        }
    }  
    return entries;
}

其中 readEntry 函数是:

private Entry readEntry(XmlPullParser parser) throws XmlPullParserException, IOException {
    parser.require(XmlPullParser.START_TAG, ns, "entry");
    String name = null;
    Record record = null;
    while (parser.next() != XmlPullParser.END_TAG) {
        if (parser.getEventType() != XmlPullParser.START_TAG) {
            continue;
        }
        String name = parser.getName();
        if (name.equals("name")) {
            parser.require(XmlPullParser.START_TAG, ns, "name");
            String title = readText(parser);
            parser.require(XmlPullParser.END_TAG, ns, "name");
        } else if (name.equals("record")) {
            // Try to figure it out by yourself for practice ;)
        } else {
            skip(parser);
        }
    }
    return new Entry(title, summary, link);
}

关于java - 在 Android 中使用 XMLPullParser 的 XML 嵌套标签有困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33341391/

相关文章:

java - 继承java,我该怎么办?

Java 2d 游戏关键听众时间限制

java - bitmapFactory.decodefile 给出 null 作为输出

java - 编辑xml文件java

xml - RSS 和 ATOM 如何通知客户端更新?长轮询或轮询或其他?

java - 整数数组列表的数组列表

返回Http状态代码的Java6 RuntimeException

java - Google Analytics 在运行时抛出 NoClassDefFoundError

没有 requestLocationUpdates 不会触发 Android 地理围栏

xml - 在XPath中使用不同级别的多个谓词