风中过客
2015-05-22 19:57
我自己试着调试了下,
感觉startElement是在遇到“<>”就执行,而endElement是在遇到“</>”就执行,那么
1.characters看不出来是在什么时候执行的,请问它是在遇到哪个标签时执行? 下面这个XML就让characters执行了十五次,费解。
2.characters方法中,传的ch数组, 我直接输出这串数组,发现输出跟原来的XML很像。ch数组是包含了XML里所有字符吗?
3.characters方法中,传的start指向的位置是<></>中间第一个字符的入口地址吗? 可是为什么我在characters方法中 System.out.println(new String(ch,start,10)); 发现它是下面这种输出的,我感觉是入口地址在<>前,如果<></>中有内容, 下一次 入口地址是在<>后。请问它的start到底指向哪儿?length不是输出的字符数量吗,为什么System.out.println(new String(ch,start,length));的时候只会输出<></>间的文本,不会将符号"<"和节点名称输出?
4. game节点中的id属性,可以根据视频那样用传入的attributes.getValue()输出,那么我写的 <英雄联盟 id="国服" 版本="3.14"></英雄联盟> ,如果是DOM解析,可以直接进入子节点通过getNodeValue得到id,版本属性,那么SAX解析如何直接将id属性和版本属性输出呢?
<game id
<英雄联盟 i
<角色 >瑞
瑞文</角色>
<ages>
18</ages>
....省略
我的xml文件。
<?xml version="1.0" encoding="GBK"?> <games> <game id="1"> <英雄联盟 id="国服" 版本="3.14"></英雄联盟> <角色 >瑞文</角色> <ages>18</ages> </game> <game id="2"> <QQ飞车 id="国服" 版本="6.07"></QQ飞车> <角色>风中过客</角色> <等级>109</等级> </game> </games>
话有点多, 请多包涵! 非常感谢!
每次遇到标签时都会执行,将空白也误认为是节点值进行输出,
<book id="1">
<name>三体</name>
<author>刘慈欣</author>
<year>2014</year>
</book>
这段总共执行了7次,有多少个节点就执行多少次,空白执行了4次
执行到startElement时,就开始向字符数组写字符,一到endElement时,立即停止这一次的字符,由此就可以知道字符数组里的内容及长度。下一次时继续这样操作。每次数组的内容都是startElement和endElement的值。
2.characters方法中,传的ch数组, 我直接输出这串数组,发现输出跟原来的XML很像。ch数组是包含了XML里所有字符吗?
答:视频里面提到过 ch就是包含了整个XML。
3.characters方法中,传的start指向的位置是<></>中间第一个字符的入口地址吗? 可是为什么我在characters方法中 System.out.println(new String(ch,start,10)); 发现它是下面这种输出的,我感觉是入口地址在<>前,如果<></>中有内容, 下一次 入口地址是在<>后。请问它的start到底指向哪儿?length不是输出的字符数量吗,为什么System.out.println(new String(ch,start,length));的时候只会输出<></>间的文本,不会将符号"<"和节点名称输出?
答:视频里提到start是在<>后,length大小,是刚好到</>前。而且空白的文本节点应该也是如此。由于空白节点字节数不够,因此输出到了如 <game id 之类的字符。
characters看不出来是在什么时候执行的,请问它是在遇到哪个标签时执行? 下面这个XML就让characters执行了十五次,费解。
答:这个应该是空白文本,和正常的字符文本 都要执行,但是空白文本具体执行了哪几次 不知道。。 如有知道,请告知。 谢谢。
4. game节点中的id属性,可以根据视频那样用传入的attributes.getValue()输出,那么我写的 <英雄联盟 id="国服" 版本="3.14"></英雄联盟> ,如果是DOM解析,可以直接进入子节点通过getNodeValue得到id,版本属性,那么SAX解析如何直接将id属性和版本属性输出呢?
已经解决, 直接在后面
else if(!qName.equals("game")&&(!qName.equals("games"))){
System.out.print("节点名:"+qName+"---");
for(int i=0;i<attributes.getLength();i++){
System.out.println("属性名称:"+attributes.getQName(i)+
"---"+attributes.getValue(i));
}
}
Java眼中的XML---文件读取
83199 学习 · 436 问题
相似问题