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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top