Classcast Lesen XML-Datei
-
04-10-2019 - |
Frage
Ich habe die folgende XML-Datei:
<?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>
Ich versuche zu laden c2 Attribute auf diese Weise:
Document d =
DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
.parse("epxy.xml");
Element c1 = d.getDocumentElement();
Element c2 = (Element)c1.getFirstChild();
while (c2 != null) {
...
c2 = (Element)c2.getNextSibling();
}
Aber ich bekomme die Ausnahme java.lang.ClassCastException: org.apache.xerces.dom.DeferredTextImpl unvereinbar mit org.w3c.dom.Element markieren in der Zeile
Element c2 = (Element)c1.getFirstChild();
vor der Schleife.
Für Hinweise? Danke.
Lösung
Das erste Kind ist das Leerzeichen zwischen dem Ende des c1 und dem Beginn der c2.
w3c DOM Mit dem Baum zu gehen ist nicht so einfach. Wenn Sie zu w3c nicht verwenden, empfehle ich dom4j - es ist viel schöner zu verwenden. Zum Beispiel wird es Textknoten von Elementen filtern, so können Sie anrufen
List children = c1.elements();
oder, namentlich zu beschränken
List children = c1.elements("c2");
Andere Tipps
Das erste Kind von c1 ist ein Textknoten das Newline enthält. Sie müssen Iterierte die Kinder Textknoten zu überspringen.