2010-05-25 76 views
1

我有以下XML文件:ClassCastException异常读取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(); 

之前的循环。

任何提示?谢谢。

回答

5

第一个孩子是c1的结尾和c2的开始之间的空白。

使用w3c DOM走树不是那么容易。如果您不必使用w3c,我建议使用dom4j - 使用起来更好。例如,它会过滤元素中的文本节点,这样你就可以调用

List children = c1.elements(); 

,或者按名称限制

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

c1的第一个孩子是包含换行符的文本节点。您需要迭代孩子跳过文本节点。