慕雪1536570
characters函数中应该是value =new string(ch,start,length);你看你是不是 写成了String value=new String(ch,start,length);
慕雪1536570
方便发下代码吗
William_Wei
第一段是XML代码
第二段是控制台输出的内容
第三段就是实现代码了
属性值是空的话,输出来的内容什么都没有哦
新手白
多了一个book的导入
44h
你需要把代码贴出来看看,猜不出
街边七号
而且每轮用完全局变量后,取null,可以减少内存消耗
程序猿淼哥
把错误提示和代码贴出来
moummm
你的startElement()方法里没有创建book对象,应该在 bIndex++;之后 创建一个 book= new Book();应该就对了,试试看看
孤诉丶
book=null已经清空
脂肪加工厂2000
她在这节课中没讲,道理是一样的,取到year节点对象后继续获取year节点的子节点对象,取值
慕圣0830664
最开头的<bookstore>标签也会进入startDocument()方法,所以要排除掉;
另外,后面的结束标签</bookstore>才会进入endDocument()方法
qq_筑城以北_04274162
startElement()方法中,只有在qName.equals("book")的时候,book才实例化( book = new Books() ).
昵称是JaVa
虽然没怎么明白解析的过程 ,不过就老师的讲解而言,我觉得应该是在解析的内部是以多线程的方式解析,所以只需要重写要实现的功能的代码就行,其他的执行过程都是交给了多线程进行执行(个人意见,应该可以这么理解,具体实现多查一些相关书籍看看吧)
thomasstar

楼上的正解。startElement方法遇到节点就解析,你的代码相当于每次都在new Book();
至于为什么还是有2个book,是因为你在endElement方法的时候判断book标签了,而book结束标签只有2个,
所以你添加了2个null的book内容。
昵称2_18位中英文
一般我们写东西,只需要知道是怎么用的就好,并不用研究怎么来的,而且有些的也研究不了。
慕粉4395355
我的也是
qq__3590
qq_柒分醉_03927370
慕侠0869665
可以本地看
慕莱坞3979215
//获取所有VatBatch000000022016-07-27_10-55-22节点的集合
NodeList bookList = document.getElementsByTagName("book"); //把books改为book
//通过nodelist的getLength()方法可以获取bookList的长度
慕粉3170877
if(qName.equals("book")){
bookList.add(book);
book=null;
System.out.println("============结束遍历第"+bookIndex+"本书的内容==============");
}else if(qName.equals("name")){
book.setName(value );
}else if(qName.equals("author")){
book.setName(value );
}else if(qName.equals("year")){
book.setName(value );
}else if(qName.equals("price")){
book.setName(value );
}else if(qName.equals("language")){
book.setName(value );
}
name是setName,author是setAuthor,下面的也是,要对应
要做Java大师
你试一下把super.startElement注释掉会看到 输出结果也没什么影响 还有子类重写方法不一定要调用父类方法 你看toString就知道了 只有子类调用构造方法会调用父类构造方法
qq_最后的轻语_0
对象添加list里面前不要book = null; 你看看是不是这错了
慕粉3347230
你应该把
SAXParserHandler
的源码发出来
Fodee
希望能看到SAXParserHandler的完整代码。
我估计:
可能你定义了两个value变量,一个是全局变量,另一个是characters()方法内局部变量。全局变量为缺省值null,局部变量为文本内容(上面遍历结果表示局部变量value中有内容)。而set中传递的为全局变量。
所以建议检查:
全局变量中定义:String value;
charaters()方法中定义: value = new String(ch, start, length);
注意:characters()中value前没有 类型String 关键字
Fodee
IT界小嫩草一枚
测试了一下,没有book=null运行也没错,不会产生author出错的情况。而且我查了一下java垃圾回收机制的情况,在循环每执行完一次,生成的Object对象都会成为可回收的对象。也就是说在第二次遍历book对象的时候前面那个已经自动被回收。至于老师为啥还要这样做估计只是把这个问题明显化,不让大家产生误会吧
慕慕5134878
请说普通话
Edana
慕村8785123
不是啊,它做了判断,当qName.equals("name")时,才执行boot.seiName(),value已经是对应书名了
因为handler的执行顺序是这样的,startElement 方法,然乎characters方法,在endElement方法,而判断在enElement处,也就是说,来到判断语句之前,value在characters方法已经获取了相应的值了。

value已经获取到值了,下面的判断,,肯定有值。