archivo XML lectura ClassCastException
-
04-10-2019 - |
Pregunta
Tengo el siguiente archivo XML:
<?xml version="1.0" encoding="UTF-8"?>
<c1>
<c2 id="0001" n="CM" urlget="/at/CsM" urle="/E/login.jsp">
</c2>
<c2 id="0002" n="C2M" urlget="/a2t/CsM" urle="/E2/login.jsp">
</c2>
</c1>
Estoy tratando de atributos de c2 carga de esta manera:
Document d =
DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
.parse("epxy.xml");
Element c1 = d.getDocumentElement();
Element c2 = (Element)c1.getFirstChild();
while (c2 != null) {
...
c2 = (Element)c2.getNextSibling();
}
Pero consigo la excepción java.lang.ClassCastException: org.apache.xerces.dom.DeferredTextImpl incompatible con org.w3c.dom.Element en la línea
Element c2 = (Element)c1.getFirstChild();
antes del bucle.
¿Alguna pista? Gracias.
Solución
El primer hijo es el espacio en blanco entre el final de c1 y c2 el inicio de.
El uso de DOM W3C para recorrer el árbol no es tan fácil. Si usted no tiene que utilizar W3C, recomiendo dom4j - es mucho más agradable de usar. Por ejemplo, se va a filtrar los nodos de texto a partir de elementos, por lo que se puede llamar
List children = c1.elements();
o, para restringir el nombre
List children = c1.elements("c2");
Otros consejos
El primer hijo de c1 es un nodo de texto que contiene la nueva línea. Es necesario para recorrer los niños que saltan los nodos de texto.