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) 

4 Solutions collect form web for “org.xml.sax.SAXParseException: Token inesperado al analizar XML”

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

  • Android SlidingPaneLayout se desvanece en las vistas incorrectas
  • Texto del botón que no consigue centrado verticalmente en botón
  • Error del proyecto AIDE y Eclipse
  • ¿Es posible tener más de un archivo de recursos de cadena en Android?
  • SurfaceView personalizado que causa NoSuchMethodException
  • Simple XML Serializer no puede satisfacer el elemento
  • Android.view.InflateException: Línea de archivo XML binario # 12: Error al inflar la clase <unknown>
  • Android: Caja blanca no deseada en la parte superior de la pantalla (barra de herramientas?)
  • ¿Cómo uso los recursos predeterminados de Android en mi layout xml?
  • Android Hexágono forma botón que tiene hexágono táctil
  • Ajustes redimensionables en Android 3.1
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.