org.xml.sax.SAXParseException: Token inesperado al analizar XML

Actualización: – Parece que tengo que dar la URL que me está devolviendo el xml. Aquí está – URL


Estoy recibiendo SAXParseException al analizar un xml. El xml que intento analizar es como sigue –

<?xml version="1.0" encoding="utf-8"?> <markers xmlns=""> <marker name="" address1="" address2="" region="" country="" zip="" imgsrc="" lat="" lng="" distance="" /> <marker name="" address1="" address2="" region="" country="" zip="" imgsrc="" lat="" lng="" distance="" /> <marker name="" address1="" address2="" region="" country="" zip="" imgsrc="" lat="" lng="" distance="" /> <marker name="" address1="" address2="" region="" country="" zip="" imgsrc="" lat="" lng="" distance="" /> <marker name="" address1="" address2="" region="" country="" zip="" imgsrc="" lat="" lng="" distance="" /> </markers> 

El código que estoy utilizando para analizar este xml es el siguiente –

 public Document getDomElement(String xml) { Document doc = null; DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { DocumentBuilder db = dbf.newDocumentBuilder(); InputSource is = new InputSource(); is.setCharacterStream(new StringReader(xml)); doc = db.parse(is); } catch (ParserConfigurationException e) { e.printStackTrace(); Log.e("ParserConfigurationException: ", e.getMessage()); return null; } catch (SAXException e) { e.printStackTrace(); Log.e("SAXException: ", e.getMessage()); return null; } catch (IOException e) { e.printStackTrace(); Log.e("IOException: ", e.getMessage()); return null; } return doc; } 

Estoy utilizando el mismo código para analizar otros datos xml y funciona. No pude entender lo que hay en este xml de datos que se detiene para analizar los datos correctamente. He comprobado el xml con muchos validadores xml en línea también.

Debo estar perdiendo algo obvio aquí.

EDIT: – El xml que estoy tratando de analizar es de un webservice (el nombre, la dirección, etc, no están realmente vacíos). Cuando intento utilizar el xml directamente por hardcoding en el código sí mismo, él trabaja muy bien. Pero al intentar utilizarlo directamente desde la respuesta de webservice, no funciona para mí.

La excepción:-

 10-09 20:39:50.328: W/System.err(16211): org.xml.sax.SAXParseException: Unexpected token (position:TEXT @1:2 in java.io.StringReader@41941010) 10-09 20:39:50.335: W/System.err(16211): at org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:146) 10-09 20:39:50.335: W/System.err(16211): at com.blackcobrastudios.ukash.WebService.XMLDataParser.getDomElement(XMLDataParser.java:159) 10-09 20:39:50.335: W/System.err(16211): at com.blackcobrastudios.ukash.Manager.APICaller.processResult(APICaller.java:386) 10-09 20:39:50.335: W/System.err(16211): at com.blackcobrastudios.ukash.Manager.APICaller.access$1(APICaller.java:385) 10-09 20:39:50.335: W/System.err(16211): at com.blackcobrastudios.ukash.Manager.APICaller$SoapCaller.onPostExecute(APICaller.java:361) 10-09 20:39:50.335: W/System.err(16211): at com.blackcobrastudios.ukash.Manager.APICaller$SoapCaller.onPostExecute(APICaller.java:1) 10-09 20:39:50.335: W/System.err(16211): at android.os.AsyncTask.finish(AsyncTask.java:602) 10-09 20:39:50.343: W/System.err(16211): at android.os.AsyncTask.access$600(AsyncTask.java:156) 10-09 20:39:50.343: W/System.err(16211): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) 10-09 20:39:50.343: W/System.err(16211): at android.os.Handler.dispatchMessage(Handler.java:99) 10-09 20:39:50.343: W/System.err(16211): at android.os.Looper.loop(Looper.java:137) 10-09 20:39:50.343: W/System.err(16211): at android.app.ActivityThread.main(ActivityThread.java:4536) 10-09 20:39:50.343: W/System.err(16211): at java.lang.reflect.Method.invokeNative(Native Method) 10-09 20:39:50.351: W/System.err(16211): at java.lang.reflect.Method.invoke(Method.java:511) 10-09 20:39:50.351: W/System.err(16211): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 10-09 20:39:50.351: W/System.err(16211): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558) 10-09 20:39:50.351: W/System.err(16211): at dalvik.system.NativeStart.main(Native Method) 10-09 20:39:50.351: E/SAXException:(16211): Unexpected token (position:TEXT @1:2 in java.io.StringReader@41941010) 

El problema estaba en la codificación. La siguiente respuesta lo explica correctamente:

https://stackoverflow.com/a/2869127/1079901

Sólo tengo que llamar a este regex en la cadena de respuesta –

 response = response.replaceAll("[^\\x20-\\x7e]", ""); 

Gracias a BalusC por una respuesta tan perfecta.

Recomiendo abandonar el analizador de saxofón y utilizar el XML oficialmente soportado XMLPullParser . Sax parser no es compatible después de Android Gingerbread (2.3.3)

Recomendaría intentar incorporar alguna validación XSD en su programa antes de ejecutarlo a través de su código.

Lo siguiente puede ayudarle en sus esfuerzos:

Si el XML contiene caracteres Unicode como caracteres árabes o persas , StringReader haría una excepción. En estos casos, pase el InputStream directamente al objeto Document

  • Configuración de lint.xml de Android Studio
  • Desarrollo de Android: error de tema perdido en eclipse ide para archivos xml de diseño
  • Cómo hacer la disposición con las esquinas redondeadas ..?
  • Serialización de objetos XML de Android
  • ¿Cómo puedo analizar un espacio de nombres con el analizador SAX?
  • El diseño de Xml cambia al cambiar la orientación
  • Cómo configurar la altura máxima de un Layout en android?
  • Buen constructor de interfaz de usuario para Android
  • Obtener el id de una vista como String en el evento onClick
  • Android: Caja blanca no deseada en la parte superior de la pantalla (barra de herramientas?)
  • Simple XML Serializer no puede satisfacer el elemento
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.