0

「条件」から値を抽出する必要がありますが、「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>
4

2 に答える 2

1

どのパーサーを使用しますか? XmlPullParser (または任意の SAX スタイルのパーサー) を使用する場合は、current_conditionsSTART_TAG に遭遇したときにフラグを設定し、チェック時にこのフラグが設定されているかどうかを確認できますconditioncurrent_conditionsEND_TAGに遭遇したら、忘れずにフラグをリセットしてください。

于 2012-04-26T04:53:03.967 に答える
0

2 番目に 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();
    }
}
于 2012-04-26T07:44:21.950 に答える