2

AndroidでSAXを使用してxmlファイルを解析しようとしていますが、問題は、関数characters(...)が複数回呼び出され、同じデータのように見えるものが数文字だけオフセットされていることです。

以下の出力からわかるように、最初は「\ talabama」で呼び出され、2回目は「labama」で呼び出されます。なぜそれがこれを行っているのかはわかりませんが、誰かが助けてくれるならそれは素晴らしいでしょう。

XML入力:

<?xml version="1.0"  encoding="utf-8"?>
<dir><name>.</name>
    <dir><name>alabama</name>
        <dir><name>sub_dir_name</name>
            <file><name>file_name.kml</name></file>
        </dir>
    </dir>
</dir>

文字の出力(...):

10-27 23:04:47.033: DEBUG/LocationHandler(10299):     
10-27 23:04:49.000: DEBUG/LocationHandler(10299):     alabama
10-27 23:04:51.835: DEBUG/LocationHandler(10299): labama
10-27 23:04:52.129: DEBUG/LocationHandler(10299): labama        abama
10-27 23:04:52.408: DEBUG/LocationHandler(10299): labama        abamasub_dir_name
10-27 23:04:52.519: DEBUG/LocationHandler(10299): ub_dir_name
10-27 23:04:52.649: DEBUG/LocationHandler(10299): ub_dir_name            _dir_name
10-27 23:04:52.809: DEBUG/LocationHandler(10299): ub_dir_name            _dir_namefile_name.kml
10-27 23:04:52.989: DEBUG/LocationHandler(10299): ile_name.kml
10-27 23:04:53.158: DEBUG/LocationHandler(10299): ile_name.kml        le_name.kml
10-27 23:04:53.358: DEBUG/LocationHandler(10299):     le_name.kml
10-27 23:04:53.529: DEBUG/LocationHandler(10299):     le_name.kml        le_name.kml
10-27 23:04:53.698: DEBUG/LocationHandler(10299):     le_name.kml

ハンドラーオーバーライド:

@Override
public void startElement(String uri, String localName, String qName,
    Attributes attributes) throws SAXException
{
}

@Override
public void endElement(String uri, String localName, String qName)
    throws SAXException
{
  _currentElementValue = "";
}

@Override
public void characters(char[] ch, int start, int length) throws SAXException
{
  _currentElementValue += new String(ch);

  Log.d(TAG, _currentElementValue);
}
4

1 に答える 1

1

コードに明らかな問題があります。characters()メソッドでは、char配列だけで文字列を盲目的に作成することはできません。以下のようになります:



public void characters(char[] ch, int start, int length) throws SAXException
{
  _currentElementValue += new String(ch, start, length);

  Log.d(TAG, _currentElementValue);
}


SAX解析がどのように機能するかについてもっと知りたいと思うかもしれません。

于 2010-10-29T03:31:41.257 に答える