我需要从“条件”中提取值,但是在“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>
答案 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();
}
}