ClassCastException fichier XML de lecture
-
04-10-2019 - |
Question
Je le fichier XML suivant:
<?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 les attributs de charge 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 de la boucle.
Les conseils? Merci.
La solution
Le premier enfant est l'espace entre les la fin de c1 et le début de c2.
En utilisant DOM w3c marcher l'arbre est pas si facile. Si vous ne devez pas utiliser w3c, je vous recommande dom4j - il 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 de limiter le nom
List children = c1.elements("c2");
Autres conseils
Le premier enfant de c1 est un nœud de texte contenant la nouvelle ligne. Vous devez itérer les enfants à sauter les nœuds de texte.