使用XmlPullParser

时间:2015-11-26 12:37:30

标签: android xml xmlpullparser

我正面临使用XmlPullParser解析xml的问题。 Everithing工作正常,除了这个问题部分:

<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返回固件或描述结束。

请帮忙。欣赏任何提示。

1 个答案:

答案 0 :(得分:1)

你应该这样做:

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

由于您已定位于描述start_tag,因此getText调用将返回Description标记内的文本。

要获取固件标记文本,您应该这样做:

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

另请参阅this这是一个干净的XmlPullParser实现的一个很好的例子。

希望这有帮助。