2010-05-25 7 views
1

je le fichier XML suivant:ClassCastException fichier XML de lecture

<?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> 

Je suis en train de charger les attributs de c2 cette façon:

Document d = 
DocumentBuilderFactory.newInstance() 
.newDocumentBuilder() 
.parse("epxy.xml"); 
Element c1 = d.getDocumentElement(); 
Element c2 = (Element)c1.getFirstChild(); 
while (c2 != null) { 
    ...   
    c2 = (Element)c2.getNextSibling(); 
} 

Mais je reçois l'exception java.lang.ClassCastException : org.apache.xerces.dom.DeferredTextImpl incompatible avec org.w3c.dom.Element dans la ligne

Element c2 = (Element)c1.getFirstChild(); 

avant la boucle.

Des indices? Merci.

Répondre

5

Le premier enfant est l'espace entre la fin de c1 et le début de c2. Utiliser w3c DOM pour marcher dans l'arbre n'est pas si facile. Si vous n'avez pas besoin d'utiliser w3c, je recommande dom4j - c'est beaucoup plus agréable à utiliser. Par exemple, il va filtrer les nœuds de texte à partir d'éléments, de sorte que vous pouvez appeler

List children = c1.elements(); 

ou, pour limiter le nom

List children = c1.elements("c2"); 
1

Le premier enfant de C1 est un nœud de texte contenant la nouvelle ligne. Vous devez répéter les enfants en ignorant les nœuds de texte.