Я использую SAX для анализа XML-файла, который я извлекаю из Интернета. Я расширил DefaultHandler с кодом, подобным:
public class ArrivalHandler extends DefaultHandler {
@Override
public void startElement(String namespaceUri, String localName, String qualifiedName, Attributes attributes) throws SAXException {
if (qualifiedName.equalsIgnoreCase("resultSet")) {
System.out.println("got a resultset");
} else if (qualifiedName.equalsIgnoreCase("location")) {
System.out.println("got a location");
} else if (qualifiedName.equalsIgnoreCase("arrival")) {
System.out.println("got an arrival");
} else {
System.out.println("There was an unknown XML element encountered: '" + qualifiedName + "'");
}
}
@Override
public void endElement(String namespaceUri, String localName, String qualifiedName) throws SAXException {
// we'll just ignore this for now
}
@Override
public void characters(char[] chars, int startIndex, int length) throws SAXException {
// ignore this too
}
}
Проблема в том, что я получаю серию пустых элементов. Журнал гласит:
There was an unknown XML element encountered: ''
There was an unknown XML element encountered: ''
There was an unknown XML element encountered: ''
etc
Это работало нормально, когда я просто передавал parser.parse
локальный файл, но теперь я извлекаю его из Интернета с помощью:
HttpClient httpClient = new DefaultHttpClient();
resp = httpClient.execute("http://example.com/whatever");
SAXParserFactory saxFactory = SAXParserFactory.newInstance();
ArrivalHandler handler = new ArrivalHandler();
SAXParser parser = saxFactory.newSAXParser();
parser.parse(resp.getEntity().getContent(), handler);
и я получаю (очевидно) пустые результаты, описанные выше.
Что я изучал до сих пор:
- Я преобразовал
InputStream
из resp.getEntity().getContent()
в строку и выгрузил ее, и похоже, что я правильно получаю XML с сервера.
- Нет исключений, но есть предупреждение "
W/ExpatReader(232): DTD handlers aren't supported.
".
Есть еще идеи, что я делаю неправильно или как это отладить?