!!!请教!!!各位老师,同学,请问这节视频中提到的characters是什么时候执行?

来源:3-3 使用 SAX 解析 XML 文件的节点名和节点间文本

风中过客

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>

话有点多, 请多包涵! 非常感谢!

写回答 关注

4回答

  • 吉首大学第一六爷
    2015-10-14 12:09:03
    已采纳

    每次遇到标签时都会执行,将空白也误认为是节点值进行输出,

    <book id="1">

          <name>三体</name>

    <author>刘慈欣</author>

    <year>2014</year>

    </book>

    这段总共执行了7次,有多少个节点就执行多少次,空白执行了4次

    风中过客

    非常感谢!

    2016-03-25 17:22:33

    共 1 条回复 >

  • 冲啊
    2016-03-11 21:30:21

    执行到startElement时,就开始向字符数组写字符,一到endElement时,立即停止这一次的字符,由此就可以知道字符数组里的内容及长度。下一次时继续这样操作。每次数组的内容都是startElement和endElement的值。

  • 风中过客
    2015-05-23 14:14:10

    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 之类的字符。

    1. characters看不出来是在什么时候执行的,请问它是在遇到哪个标签时执行? 下面这个XML就让characters执行了十五次,费解。

    答:这个应该是空白文本,和正常的字符文本 都要执行,但是空白文本具体执行了哪几次 不知道。。 如有知道,请告知。 谢谢。

  • 风中过客
    2015-05-22 21:37:40

    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---文件读取

通过Java认识并且创造XML文件,如何应用 Java“解析 XML

83199 学习 · 436 问题

查看课程

相似问题