SAX en Android es cada vez llama varias veces con los mismos datos, pero compensado

StackOverflow https://stackoverflow.com/questions/4038509

  •  27-09-2019
  •  | 
  •  

Pregunta

Estoy tratando de analizar un archivo XML usando SAX con Android y el problema es que los caracteres de función (...) está consiguiendo llamar varias veces con lo que parece ser los mismos datos simplemente compensado por unos pocos caracteres.

Como se puede deducir de la salida por debajo de la primera vez que se llama a la "\ talabama" y la segunda vez que se llama a la "Labama". No estoy seguro de por qué está haciendo esto, pero si alguien puede ayudar a que sería impresionante.

Entrada 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>

Salida de caracteres (...):

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

Handler overides:

@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);
}
¿Fue útil?

Solución

Veo un problema evidente en su código, en los caracteres () método, no se puede crear una cadena ciegas con sólo la matriz de caracteres. Debe ser como esta a continuación:



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

  Log.d(TAG, _currentElementValue);
}


Es posible que desee obtener más información sobre cómo analizar SAX obras.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top