当前位置: 代码迷 >> Android >> SAX解析,对一个tag为什么执行三次 character()方法
  详细解决方案

SAX解析,对一个tag为什么执行三次 character()方法

热度:63   发布时间:2016-05-01 11:16:53.0
SAX解析,对一个tag为啥执行三次 character()方法?
本帖最后由 freeman527 于 2011-06-19 20:56:13 编辑
一个简单的xML  , 如下:
<students>
<student>
<id>1</id>
<name>Tom</name>
<sex>M</sex>
<age>22</age>
</student>
</students>
复写的characters()方法,截取如下:
public void characters(char[] ch, int start, int length)throws SAXException {
if(tgName.equals("id")){//为何在进入<id>标签后,该if语句会被执行三次呢?其中tgName变量是在startElement()方法中赋值的。
    tmp=new String(ch,start,length);
    id=tmp;
    System.out.println("From characters id="+id);
}
         ……
注:
经Debug三次所取得的内容分别为:
1
\n
\t
还请牛人指教,谢谢!

------解决方案--------------------
sax解析 也叫事件解析,就是在解析数据的时候,是逐个向前解析的,如果<name>kechanghe 123457894321fda</name>当解析到<name>时,接下的数据是内容,当把内容解析到hanghe时,可能内存就要清理一次 然后调用characters(char[] ch, int start, int length)throws SAXException 这个事件进行向外输出,输出后 再继续向下读,当读取</name>时说明是结束标记,所以应该将123457894321fda内容调用上面那个函数输出,如果<name></name>的内容特别多,就有可能调用输出函数多次,也就有可能是三次。
   希望我的回答对你有帮助。
------解决方案--------------------
有xml不允许的特殊字符时会,如<,>等等会分隔
------解决方案--------------------
回车,\t,和内容值都会触发characters方法
------解决方案--------------------
可能你的xml文件<id>1</id>开始的时候被你写成
<id>
1
</id>
这样了,其实空格回车在解析的时候都会被当做内容。
  相关解决方案