ClassCastException чтение XML-файла - PullRequest
1 голос
/ 25 мая 2010

У меня есть следующий 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> 

Я пытаюсь загрузить атрибуты c2 следующим образом:

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

Но я получаю исключение java.lang.ClassCastException: org.apache.xerces.dom.DeferredTextImpl несовместим с org.w3c.dom.Element в строке

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

перед циклом.

Есть какие-нибудь подсказки?Спасибо.

Ответы [ 2 ]

5 голосов
/ 25 мая 2010

Первый дочерний элемент - это пробел между концом c1 и началом c2.

Использование w3c DOM для обхода дерева не так просто. Если вам не нужно использовать w3c, я рекомендую dom4j - его гораздо приятнее использовать. Например, он будет фильтровать текстовые узлы из элементов, поэтому вы можете позвонить

List children = c1.elements();

или, для ограничения по имени

List children = c1.elements("c2");
1 голос
/ 25 мая 2010

Первый дочерний элемент c1 является текстовым узлом, содержащим символ новой строки. Вам нужно итерировать дочерние элементы, пропуская текстовые узлы.

...