使用 XmlPullParser 解析复杂 XML

Parsing complex XML using XmlPullParser

我遇到了使用 XmlPullParser 解析 xml 的问题。除了这个有问题的部分外,一切都很好:

<Device> 

    <Description>
            Tracker, type CONNECT
            <Firmware>0240</Firmware>
    </Description>

    <Settings>
    ...
    </Settings>

    <Variables>
    ...
    </Variables>
</Device>

我需要解析 DESCRIPTION 和 FIRMWARE。但是由于这种标签结构怪异,我无法正确阅读该描述文本。

我试过的(following this guide):

private Device parseDevice(XmlPullParser parser) throws XmlPullParserException, IOException {
    Device device = new Device();

    parser.require(XmlPullParser.START_TAG, ns, DEVICE);
    //device.setDescription(readDeviceDescription(parser)); <---tried to parse from here
    device.setName(readDeviceName(parser));

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

        // Starts by looking for the entry tag
        switch (name) {
            case DESCRIPTION:
                //  device.setDescription(readDeviceDescription(parser)); <---and from here
                device.setFirmware(readDescription(parser, device)); //<-- and inside this method
                break;

            case VARIABLES:
                device.setGroups(readGroups(parser));
                break;

            default:
                skip(parser);
                break;
        }
    }
    return device;
}

readDeviceDesscription()方法(可能问题出在这里):

private String readDeviceDescription(XmlPullParser parser) throws XmlPullParserException, IOException {
    String result = "";
    if (parser.next() == XmlPullParser.TEXT) {
        result = parser.getText();
        parser.next();
    }
    return result;
}

但是我的任何尝试都以向固件或描述返回 null 结束。

请帮忙。感谢任何提示。

你应该这样做:

private String readDeviceDescription(XmlPullParser parser) throws XmlPullParserException, IOException {
    String result = parser.getText();
    return result;
}

由于您已经定位在 Description start_tag getText 调用将 return Description 标签内的文本。

要获取固件标签文本,您应该执行以下操作:

if(parser.getEventType() == XmlPullParser.START_TAG && parser.getName().compareTo("Firmware")==0)
    String firmwareText = parser.getText();

另请查看 它是干净的 XmlPullParser 实现的一个很好的例子。

希望对您有所帮助。