SAX разбора проблемы в Android ... пустые элементы? - PullRequest
2 голосов
/ 23 декабря 2009

Я использую 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);

и я получаю (очевидно) пустые результаты, описанные выше.

Что я изучал до сих пор:

  1. Я преобразовал InputStream из resp.getEntity().getContent() в строку и выгрузил ее, и похоже, что я правильно получаю XML с сервера.
  2. Нет исключений, но есть предупреждение "W/ExpatReader(232): DTD handlers aren't supported.".

Есть еще идеи, что я делаю неправильно или как это отладить?

1 Ответ

3 голосов
/ 23 декабря 2009

Из документов для ContentHandler.startElement:

квалифицированное имя требуется, когда свойство namespace-prefixes истина, и необязательно, когда Свойство namespace-prefixes имеет значение false (по умолчанию).

Итак, свойство namespace-prefixes установлено в true?

Можете ли вы вместо этого справиться с URI и localName?

...