Я разрабатываю приложение для Android и мне нужно проанализировать XML-файл. Мне сказали, что парсеры SAX лучше подходят для мобильных устройств, и я пытался их использовать, но я застрял. Вот код XML:
<current_conditions>
<condition data="Clear"/>
<temp_f data="50"/>
<temp_c data="10"/>
<humidity data="Humidity: 76%"/>
<icon data="/ig/images/weather/sunny.gif"/>
<wind_condition data="Wind: NE at 14 mph"/>
</current_conditions>
<forecast_conditions>
<day_of_week data="Tue"/> ****
<low data="43"/>
<high data="64"/> ****
<icon data="/ig/images/weather/mostly_sunny.gif"/>
<condition data="Mostly Sunny"/>
</forecast_conditions>
<forecast_conditions>
<day_of_week data="Wed"/>
<low data="43"/>
<high data="64"/>
<icon data="/ig/images/weather/sunny.gif"/>
<condition data="Clear"/>
</forecast_conditions>
Я пытаюсь получить значения только двух тегов с * рядом, но вместо этого он возвращает значения в конце документа. Как решить эту проблему, так как я хочу только определенные значения в XML. Вот мой код:
public class ExampleHandler extends DefaultHandler {
private boolean in_in_current_conditions = false;
private boolean in_in_forecast_conditions = false;
private ParsedExampleDataSet myParsedExampleDataSet = new ParsedExampleDataSet();
public ParsedExampleDataSet getParsedData() {
return this.myParsedExampleDataSet;
}
@Override
public void startDocument() throws SAXException {
this.myParsedExampleDataSet = new ParsedExampleDataSet();
}
@Override
public void endDocument() throws SAXException {
}
@Override
public void startElement(String namespaceURI, String localName,
String qName, Attributes atts) throws SAXException
{
if (localName.equals("forecast_information"))
{
this.in_forecast_information = true;
}
else if (localName.equals("current_conditions"))
{
this.in_in_current_conditions = true;
}
else if (localName.equals("forecast_conditions"))
{
this.in_in_forecast_conditions = true;
}
else if (localName.equals("high")) {
if (this.in_in_forecast_conditions)
{
String attrValue = atts.getValue("data");
myParsedExampleDataSet.setCurrtempValue(attrValue);
}
} else if (localName.equals("day_of_week")) {
if (this.in_in_forecast_conditions) {
String attrValue1 = atts.getValue("data");
myParsedExampleDataSet.setLowValue(attrValue1);
}
}
}
@Override
public void endElement(String namespaceURI, String localName, String qName)
throws SAXException {
if (localName.equals("forecast_information")) {
this.in_forecast_information = false;
} else if (localName.equals("current_conditions")) {
this.in_in_current_conditions = false;
} else if (localName.equals("forecast_conditions")) {
this.in_in_forecast_conditions = false;
}
}
@Override
public void characters(char ch[], int start, int length) {
}
}