如何在XML解析中更具体?

时间:2012-04-26 04:42:20

标签: android xml parsing xml-parsing

我需要从“条件”中提取值,但是在“current_conditions”下提取值。 这是我现在的代码。它从条件中提取值,但是从“forecast_conditions”中提取。顺便说一句,我正在使用SAXParser。

if (localName.equals("condition")) {
    String con = attributes.getValue("data");
    info.setCondition(con);
}

这是XML。

<current_conditions>
    <condition data="Clear"/>        
</current_conditions>

<forecast_conditions>
    <condition data="Partly Sunny"/>
</forecast_conditions>

2 个答案:

答案 0 :(得分:1)

你使用哪种解析器?如果您使用XmlPullParser(或任何SAX样式解析器),则可以在遇到current_conditions START_TAG时设置标记,并在检查condition时检查是否设置了此标记。遇到current_conditions END_TAG时,请不要忘记重置标记。

答案 1 :(得分:0)

我将第二个XmlPullParser - 它很容易理解。

以下是一些代码(未经测试)

public void parser(InputStream is) {
    XmlPullParserFactory factory;
    try {
        factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(true);
        XmlPullParser xpp = factory.newPullParser();
        xpp.setInput(is, null);

        boolean currentConditions = false;
        String curentCondition;

        int eventType = xpp.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT) {
            if (eventType == XmlPullParser.START_TAG) {
                if (xpp.getName().equalsIgnoreCase("current_conditions")) {
                currentConditions = true;
                } 
                else if (xpp.getName().equalsIgnoreCase("condition") && currentConditions){
                    curentCondition = xpp.getAttributeValue(null,"Clear");
                }
            } else if (eventType == XmlPullParser.END_TAG) {
                if (xpp.getName().equalsIgnoreCase("current_conditions"))
                    currentConditions = false;
            } else if (eventType == XmlPullParser.TEXT) {
            }
            eventType = xpp.next();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}