Tengo una pequeña clase en JAVA que lee un XML y lo "parsea" en distintos tipos de objeto, para así poder tratar dichos objetos a posteriori.
Este XML me viene desde internet, y con JAVA me funciona bien el "parseo". No obstante, usando la misma clase desde una aplicación android recibo un error...
Mi clase hace básicamente esto:
Código Java:
Ver original
/** * fill method. * Fills data using given String array from Globals assigned file. * Eg: fill(new String[]{"meta", "user", "activities")} * @param curr * @param file * @return true if everything is ok; false otherwise */ try{ Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new java.io.StringReader(file))); doc.getDocumentElement().normalize(); for(int i=0;i<curr.length;i++) this.treat((doc.getElementsByTagName(curr[i])), curr[i]); }catch(ParserConfigurationException e){ this.error = Strings.PARSEEXCEPTION.getValue(); this.exception = e; return false; }catch(SAXException e){ this.error = Strings.SAXEXCEPTION.getValue(); this.exception = e; return false; this.error = Strings.IOEXCEPTION.getValue(); this.exception = e; return false; } return this.check(); } for(int i=0;i<nl.getLength();i++) this.add(nl.item(i), kind); } if(kind.equals("meta")) this.addMeta(n); //más código } private void addMeta(Node n){ String[] fields = {"src", "timestamp", "title", "kind", "startDate", "startWeek", "offset" , "print", "back", "forward", "fname", "lname", "ref", "crcData"}; for(int i=0;i<fields.length;i++) this.add(e.getElementsByTagName(fields[i]).item(0).getFirstChild(), "meta:"+fields[i]); }
Y el error (en Android) me da justo cuando hago el cast a Element, me dice que hay un "ClassCastException", cuando en una ejecución JAVA normal no da error.
He leído que puede ser por los espacios en blanco o saltos de línea, pero el XML que recibo está en una sola línea y sin espacios en blanco...
Haciendo debug he intentado hacer lo siguiente - en el apartado de eclipse "expressions":
n.getChildNodes() => NodeList (long. 4)
(Element)n.getChildNodes.item(0) => Element
(Element)n.getChildNodes.item(1) => Element
(Element)n.getChildNodes.item(2) => Element
(Element)n.getChildNodes.item(3) => Element
Así que en principio se pueden hacer el cast.
Entonces, ¿quizás debería cambiar la línea que me da el error por algún tipo de bucle que me compruebe con un "if" si se puede hacer el cast y (si se puede) añadirlo a alguna lista?
El tema es que he probado de hacer algo así, pero no se que tipo de dato usar ya que ni Element, ni Node, ni NodeList, ni NodeImpl se pueden instanciar...
Desde ya gracias por cualquier info. que me podáis dar.
Un saludo!