1

我正在扩展 DefaultHandler 来解析 xml。我正在解析这个页面: http ://maps.googleapis.com/maps/api/directions/xml?origin=staten%20island&destination=florida&sensor=false

我得到了所有的折线>点。除了一个特定的字符串外,一切正常。我正在重写 DefaultHandler 中的 characters 方法,如下所示:

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;
    }

}

当字符串长度为 660 个字符时,长度返回 282。这是字符串:

qhitfxpifmn @ t @ CdMva wnnbjeeti | plixnxhmjldq | dalwa ~CxfEfOxRlKo〜pduvoltnhdjbyl \ fvlw q@~p@~gAgafkzkbp Rpa@bi@|wAnuBjZ|c@rD~Fjjp | i | qzr @ ~AbKpSj〜ovgdknphubmpn〜{@ tlhmlzfzni〜Ilh @ nn O~GbJjEpGpErHbIfPpDxIvDpKzRvp@rE|MrF|MhKpRbFir_ @ @ LtS~MzYp[bw@hEvJ|Flblvqzhrjfv @ fz @ nuxxh AtoAlGzIlabwavmfrx_anmalr @ z } @jQtTfJxJv] H] buDfqDjFrGbI〜K | E〜HpFnKlFfLzB | FjElMhCvI | T w@vDnPzChPx@vFdBhOrh@xlFbNptAvAdMnBMnEjT〜EvQhF O~FNjCjFhEtHlEbHbk @ BX @ FWB ^ nSvXnSrYxGpKjDvGnDxHnHdR〜_A | gCdNz] tEtMfs @ zlBbHhQ | jDzoH | R @ 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 CdMWnnBjeEtI|PlIxNxHhMjLdQ|dAlwA ~CxfEfOxRlKO~PdUvOlTnHdJbYl\fVlW q@~p@~gAgAfKzKbP Rpa@bi@|wAnuBjZ|c@rD~FJjP|I|Qzr@ ~AbKpSJ~OvGdKnPhUbMpN~{@~{@tLhMlZfZnI~Ilh@nh@ O~GbJjEpGpErHbIfPpDxIvDpKzRvp@rE|MrF|MhKpRbFnN`Jhf@jo@ LtS~MzYp[bw@hEvJ|FLbUxHxA

它在字符 282 处停止,我不知道为什么。

4

1 回答 1

4

从由 DefaultHandler 实现的ContentHandler接口的文档中:

SAX 解析器可以在单个块中返回所有连续的字符数据,也可以将其拆分为多个块

您需要在 StringBuilder 中聚合来自对该方法的多次调用的数据,然后在 endElement 调用中处理该数据。

于 2011-02-19T12:15:16.627 回答