Problema con el análisis de archivos xml codificados en UTF-8 en Android 3.1 sdk

La api de análisis de XML está lanzando una excepción de análisis de sax, si trato de analizar un archivo xml que tiene atributos en el nodo raíz.

Una cosa que he notado es que esto sucede si hay un carácter BOM UTF-8 al comienzo de la cadena, si elimino el carácter BOM, las cosas funcionan bien. Este código funciona bien en 3.0 sdk y a continuación, vi este problema solo en 3.1

estoy usando el siguiente analizador:

    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = docFactory.newDocumentBuilder();

    Document doc = null;
    StringReader sr = new StringReader(xmlString);
    InputSource is = new InputSource(sr);

    doc = builder.parse(is);

preguntado el 16 de mayo de 11 a las 18:05

2 Respuestas

Prueba esto:

public Document parse(String xml) throws ParsingFailedException {
   try {
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = factory.newDocumentBuilder();

      //encode the xml to UTF -8

      ByteArrayInputStream encXML = new ByteArrayInputStream(xml.getBytes("UTF8"));

      Document doc = builder.parse(encXML);
      log.error("XML parsing OK");

      return doc;
   } catch (Exception e) {
      log.error("Parser Error:" + e.getMessage());
      throw new ParsingFailedException("Failed to parse XML : Document not well formed", e);
   }
}

contestado el 16 de mayo de 11 a las 22:05

seguro, gracias, esto funcionará, creo, porque estás pasando un flujo de entrada. - Naresh

Gracias evilone,

Abrí un problema con Google y lo solucionarán en su sucursal. http://code.google.com/p/android/issues/detail?id=16892

Comentarios del desarrollador de Google:

"He preparado una solución para el problema raíz en nuestro árbol Honeycomb interno. Pero no necesita la solución para su código. Su método parseXml debería tomar un InputStream en lugar de un String. Puede pasarlo directamente a InputSource constructor."

contestado el 17 de mayo de 11 a las 10:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.