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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top