2010-02-15 13 views
7

Estoy escribiendo una pequeña aplicación para robar la pantalla que consume algo de XHTML. Ni que decir tiene que el XHTML no es válido: los símbolos y símbolos no se escapan como &.Analizando símbolos válidos con XmlPullParsers de Android

estoy usando Android de XmlPullParser y arroja el siguiente error en el valor codificado de forma incorrecta:

org.xmlpull.v1.XmlPullParserException: unterminated entity ref 
(position:START_TAG <a href='/Fahrinfo/bin/query.bin/dox?ld=0.1&n=3&i=9c.0323581.1266265347&rt=0&vcra'> 
@55:134 in [email protected]) 

¿Cómo consigo alrededor de esto? He pensado en las siguientes soluciones:

  1. Envolver la InputStream en otro que sustituye a los símbolos de unión con los árbitros entidad
  2. Configuración del analizador de manera que mágicamente acepta el marcado incorrecta

que es probable que las para ser mas exitoso?

+1

Gracias por publicar esta pregunta. Estaba experimentando una "referencia de entidad no terminada" en algunos XML que estaba tratando de analizar con XmlPullParser, pero no estaba seguro de lo que estaba causando. Pero ahora que mencionas signos de unión no escapados (lo que provoca que XML no sea válido, pero Firefox no se mostrará, excepto en el modo fuente) como causa posible, estoy bastante seguro de que ese es mi problema, ¡que hará que sea mucho más fácil solucionarlo! –

Respuesta

2

Me gustaría ir con su primera opción, reemplazar el ampersands parece una solución más adecuada que la otra. La segunda opción parece más un truco para que funcione al aceptar marcas incorrectas.

6

Estuve atascado en esto durante aproximadamente una hora antes de descubrir que en mi caso era el "&" que no podía ser resuelto por XML PULL PARSER, así que encontré la solución. Entonces aquí hay un fragmento de código que lo arregla totalmente.

void ParsingActivity(String r) { 
    try { 
     parserCreator = XmlPullParserFactory.newInstance(); 
     parser = parserCreator.newPullParser(); 
     // Here we give our file object in the form of a stream to the 
     // parser. 
     parser.setInput(new StringReader(r.replaceAll("&", "&amp;"))); 
     // as a SAX parser this will raise events/callback as and when it 
     // comes to a element. 
     int parserEvent = parser.getEventType(); 
     // we go thru a loop of all elements in the xml till we have 
     // reached END of document. 
     while (parserEvent != XmlPullParser.END_DOCUMENT) { 
      switch (parserEvent) { 
      // if u have reached start of a tag 
      case XmlPullParser.START_TAG: 
       // get the name of the tag 
       String tag = parser.getName(); 

más o menos lo que estoy haciendo sólo estoy reemplazando el & con &amp; ya que estaba tratando con analizar una dirección URL. Espero que esto ayude.