急需答案!!!!

ZL411282 2012-06-15 09:50:21
<?xml version="1.0" encoding="UTF-8"?>
<!--Sort种类,Book名字,Author作者,Intro简介-->
<NovelInfo>
<Sort name="武侠">
<Book name=" 古侠今遇"/>
<Item>
<Author>醉人岁月</Author>
<Intro>
与世隔绝三百多年的“碧湖山庄”四少侠出现在大都市中,
</Intro>
<Text>
与世隔绝三百多年的“碧湖山庄”四少侠出现在大都市中,
在记者精心安排下与现代人产生各种故事,既有古人的风
采,又有现代人的韵味!情节离奇曲折,古代武功与现代
科技揉和在一起,意味深长!与现代嵩山少林比试,更是
经典中的经典!奇妙的结局,让您怵目惊心!
第一章节 古侠惊现
1.碧湖山庄 ..............,请下载后阅读
</Text>
</Item>
<Book name="寒剑孤灯"/>
<Item>
<Author>忧郁丁香</Author>
<Intro>
桃花树下多冤魂!江山如画,美人如花,爱江山还是爱美人?
“忠”字当先,但面对君王夺妻之恨,智勇双全的将军又当如
何决择?硝烟里红颜身兼两国王后,因是一国王后开城出降,
因是一国王后入城庆功。乱世出英才,谁能在滚滚烟尘中笑傲
群雄?《寒剑孤灯》,演绎乱世英雄传奇。
</Intro>
</Item>
</Sort>
<Sort name="言情">
<Book name="你在下了雨的晴天"/>
<Item>
<Author> 鱼日晨</Author>
<Intro>
不了门户的悬殊。她隐忍离开,四年后,带着巴黎首席设计师
头衔,荣光归来,却发现她那么笃定的男人即将跟别人订婚,
可无意得知里面另有隐情。她一再地遭人黑手,他一次次出手
相救;她丢了设计师的头衔,他脱离了豪门世家。但当两人即
</Intro>
</Item>
<Book name="悠悠子衿"/>
<Item>
<Author> 幕小小</Author>
<Intro>
谁说人死不能复生
她莫悠悠不但活回来了,而且活得风生水起
欧阳子衿看着这个酷似他已经死了三年的前妻的女人
</Intro>
</Item>
</Sort>
</NovelInfo>


import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class ReadInfo {
public static void readInfo() {
//创建解析器工厂对象
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
try {
//由解析器工厂对象创建解析器对象
DocumentBuilder db=dbf.newDocumentBuilder();
//由解析器对象指定xml文件进行解析,构建dom树,创建document对象;
Document doc=db.parse("C:/Users/zhangpeng/workspace/novelPlatformproject/src/com/bdqn/entity/Txt.xml");
//得到所有<sort>节点列表信息
NodeList sortList=doc.getElementsByTagName("Sort");
//循环Sort信息
for(int i=0;i<sortList.getLength();i++){
Node sort=sortList.item(i);
//获取第i个Sort元素的name属性的值并输出信息
Element element=(Element) sort;
String sortName=element.getAttribute("name");
System.out.println(sortName);
//得到Sort的子元素列表
NodeList childList= sort.getChildNodes();
for(int j=0;j<childList.getLength();j++){
Element bookElement= (Element) childList.item(0);
String book=bookElement.getAttribute("name");
System.out.println("类型:"+sortName+"\t 书名:"+book);

}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
readInfo();
}
}

请问一下前辈们,我用在这个解析上面的xml文件时候老师出现这个错误,请指点!!!谢谢!

java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.DeferredTextImpl cannot be cast to org.w3c.dom.Element
at com.bdqn.tools.ReadInfo.readInfo(ReadInfo.java:33)
at com.bdqn.tools.ReadInfo.main(ReadInfo.java:48)

怎么会是 强制类型转化错误?





...全文
310 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiao5438799 2013-07-25
  • 打赏
  • 举报
回复
引用 11 楼 nbda1121440 的回复:
今天学了一遍xml文件的解析,发现原来getChildNodes这个函数还有可能返回空白的 比方说:

<font>
    <name>Helvetica</name>
    <size>36</size>
</font>
如果你使用getChildNodes会得到5个元素,分别是: Text: 空白 Element: <name> Text: 空白 Element: <size> Text: 空白 所以你的程序也是这种情况,当你得到空白文本的时候,却想把它强制转化为Element对象,所以肯定会出问题 你把出错的代码修改一下,在强制转化之前加一个instanceof判断,就行了 下面是我在你出错的代码上修改的,可以参考一下

//得到Sort的子元素列表
NodeList childList= sort.getChildNodes();  
for(int j=0;j<childList.getLength();j++){
	//Element bookElement= (Element) childList.item(0);
	Node child = childList.item(j);
	if (child instanceof Element)
	{
		Element bookElement = (Element) child;
		String book=bookElement.getAttribute("name");
		System.out.println("类型:"+sortName+"\t 书名:"+book);
	}
}
感谢你的回答,给我很大的帮助
zxcliuwei 2012-06-27
  • 打赏
  • 举报
回复
11楼都给你解答了,咋还没结贴呢???
zxcliuwei 2012-06-27
  • 打赏
  • 举报
回复
人家都给你解答了,咋还没结贴呢???
SmileToCandy 2012-06-26
  • 打赏
  • 举报
回复
ZL411282 2012-06-25
  • 打赏
  • 举报
回复
好的,谢谢你!你的回答很有用!
周靖峰 2012-06-23
  • 打赏
  • 举报
回复
今天学了一遍xml文件的解析,发现原来getChildNodes这个函数还有可能返回空白的

比方说:

<font>
<name>Helvetica</name>
<size>36</size>
</font>


如果你使用getChildNodes会得到5个元素,分别是:
Text: 空白
Element: <name>
Text: 空白
Element: <size>
Text: 空白

所以你的程序也是这种情况,当你得到空白文本的时候,却想把它强制转化为Element对象,所以肯定会出问题

你把出错的代码修改一下,在强制转化之前加一个instanceof判断,就行了

下面是我在你出错的代码上修改的,可以参考一下

//得到Sort的子元素列表
NodeList childList= sort.getChildNodes();
for(int j=0;j<childList.getLength();j++){
//Element bookElement= (Element) childList.item(0);
Node child = childList.item(j);
if (child instanceof Element)
{
Element bookElement = (Element) child;
String book=bookElement.getAttribute("name");
System.out.println("类型:"+sortName+"\t 书名:"+book);
}
}
sft0809 2012-06-16
  • 打赏
  • 举报
回复
你先获取下XML的root节点,然后在获取他下的子节点!
你试下吧,我以前做的时候都是先获取root节点再获取他子节点、遍历的!
ZL411282 2012-06-16
  • 打赏
  • 举报
回复
指点,顶起来
ZL411282 2012-06-16
  • 打赏
  • 举报
回复
高手举牌哦
淡定的峰哥 2012-06-16
  • 打赏
  • 举报
回复
Element是Node的子接口,NodeList里面放的是Node,所以转化为Element是向下转型,最好加instanceof来判断,一般不建议向下转型,因为java只提供接口,不同的第三方jar包有不同的实现,有的时候能成功,有时候不一定了
ZL411282 2012-06-16
  • 打赏
  • 举报
回复
虽然没有说出原因,还是很谢谢你的回答!
周靖峰 2012-06-16
  • 打赏
  • 举报
回复
可能是因为getElementsByTagName这个方法实际返回的是Element对象,所以前面可以强制转换成功

而getChildNodes可能返回的只是Node对象,并不是Element对象,所以转换失败

这只是我的猜测,其实我对这部分的api也不是很清楚,希望下面有高手回答
ZZZ5512536 2012-06-15
  • 打赏
  • 举报
回复
是不是import包时选错了?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧