java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.DeferredTextImpl cannot be cas

本文解决了一个使用DOM解析XML时出现的ClassCastException异常问题,原因是XML文件中的空白字符被解析为文本节点,尝试将其转换为Element时引发异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用Dom解析xml出现的异常

2012-03-27 17:15 wangwenq609  |  分类:网站使用  |  浏览819次
Exception in thread "main" java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.DeferredTextImpl cannot be cast to。org.w3c.dom.Element

代码:
NodeList nl = doc.getElementsByTagName("Brand");
for (int i = 0; i < nl.getLength(); i++) {
       Element brandNode = (Element) nl.item(i);		
       NodeList childList = brandNode.getChildNodes();
       for (int j = 0; j < childList.getLength(); j++) {
	Element typeElement = (Element) childList.item(j);   //Exception
	String typeName = typeElement.getAttribute("name");
	System.out.println("手机:"+brandName+typeName);
       }
}
xml  code:
<?xml version="1.0" encoding="utf-8"?>
<PhoneInfo>
     <Brand name="苹果">
         <Type name="IPhone4"/>
         <Type name="IPhone5"/>
     </Brand>
     <Brand name="联想">
	<Type name="A60"/>
     </Brand>
</PhoneInfo>
请问这是什么原因造成的?
提问者采纳
2012-03-28 07:05
从你的代码上看不出什么来。
Element typeElement = (Element) childList.item(j);   //Exception
错误的原因是 com.sun.org.apache.xerces.internal.dom.DeferredTextImpl  不能转成
 org.w3c.dom.Element

你看一下你引用的类吗,估计是同名的你引错了。导致强转类型时出错。
追问
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
我引用的类就这几个,你看有问题吗?
回答
这么看是没有问题。
提示中的这个
com.sun.org.apache.xerces.internal.dom.DeferredTextImpl
是什么造成的?
从这里找一下原因吧
追问
在百度里面实在是搜不到答案,然后就Google了一下,那些英文让我花了大把的时间才才搞清楚。
问题主要是在我的xml文档中元素之间使用了空格符,在getChildNodes()的时候系统把空格当成了文本节点,所以在遍历ChildNodes的时候将文本节点强制转换成Element类型就会出错。
谢谢你帮忙哈!
提问者评价
3q
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值