Класс DefaultHandler в Android не читает всю строку из XML - PullRequest
1 голос
/ 19 февраля 2011

Я расширяю DefaultHandler для анализа xml.Я анализирую эту страницу: http://maps.googleapis.com/maps/api/directions/xml?origin=staten%20island&destination=florida&sensor=false

Я получаю все полилинии> точек.Все работает отлично, за исключением одной конкретной строки.Я переопределяю метод символов в DefaultHandler следующим образом:

public void characters(char[] ch, int start, int length) throws SAXException {
if (currentElement) {
    Log.v("Length", length+"");
    currentValue = new String(ch, start, length);
    currentElement = false;
    }

}

Длина возвращает 282, когда длина строки составляет 660 символов.Это строка:

qhitFxpifMn @ t @ vA CdM WnnBjeEtI | PlIxNxHhMjLdQ | dAlwA ~CxfEfOxRlK O ~ PdUvOlTnHdJbYl \ fVlW q@~p@~gA gAfKz | J3 * JJPPOvGdKnPhUbMpN ~ {@ ~ {@ tLhMlZfZnI ~ ILH @ пН @ нН O~GbJjEpGpErHbIfPpDxIvDpKzRvp@rE|MrF|MhKpRbF Ir_ @ жо @ LtS~MzYp[bw@hEvJ|F LbLvQzHrJfv @ FZ @ nUxXh AtoAlGzIl AbwAvMfRx_AnmAlr @ г} @jQtTfJxJv] ч] buDfqDjFrGbI ~ K | E ~ HpFnKlFfLzB | FjElMhCvI| T w@vDnPzChPx@vFdBhOrh@xlFbNptAvAdMnB MnEjT ~ EvQhF O~F NjCjFhEtHlEbHbk @ BX @ Fwb ^ nSvXnSrYxGpKjDvGnDxHnHdR ~ _A | gCdNz] tEtMfs @ zlBbHhQ | jDzoH | г @ LZA | YVK @ xClFvJxRhInOhP \hJ|PbIvOxB|E|m@plA~LpUzs@dwAvj@hfA|D|IrDrJzlAriDhFfR~Uv~@h @ J | Afy @ {DtFzX|BtOpArLvSjcCv@dNJjEGbFDdDVnElAnIx@xDnC~JbApFb@fDbKb~@ Dj ^ hBvN| BbO | Dl]

И вот что возвращает DefaultHandler:

qhitFxpifMn @ t @ vA CdM WnnBjeEtI | PlIxNxHhMjLdQ | dAlwA ~CxfEfOxRlK O ~ * pdUvOlYlfhbbF1028 * JjP | I | Qzr @ ~AbKpS J ~ OvGdKnPhUbMpN ~ {@ ~ {@ tLhMlZfZnI ~ Ilh @ nh @ nN O~GbJjEpGpErHbIfPpDxIvDpKzRvp@rE|MrF|MhKpRbF Ir_ @ jo @ LtS~MzYp[bw@hEvJ|F LbLvQzHrJfv @ fz @ nUxXh`A * * 1032Он останавливается на персонаже 282, и я не знаю почему.

1 Ответ

4 голосов
/ 19 февраля 2011

Из документации интерфейса ContentHandler , который реализован в DefaultHandler:

SAX-парсеры могут возвращать все непрерывные символьные данные в одном фрагменте или могут разбивать их на несколько фрагментов

Вам необходимо объединить данные из нескольких вызовов этого метода в StringBuilder, а затем обработать эти данные в вызове endElement.

...