android中用sax方式对xml文件解析时的方法调用的讨论

        首先,我给出一个XML文件,内容是
        
        (不符合规范是为了验证我的猜想)        

<?xml version="1.0" encoding="utf-8"?>
<Resources>1
        <Resource>2
                <ID>3</ID>4
                <MP3name>5</MP3name>6
                <MP3size>7</MP3size>8
                <LRCname>9</LRCname>10
                <LRCsize>11</LRCsize>12
        </Resource>13
</Resources>

        我起初认为这个文件的解析顺序应该是这样的
        Resources-->  startelement
        Resource -->  startelement
        ID         -->  startelement -->characters -->endelement
        MP3name  -->  startelement -->characters -->endelement
        MP3size  -->  startelement -->characters -->endelement
        LRCname  -->  startelement -->characters -->endelement
        LRCsize  -->  startelement -->characters -->endelement
        Resource -->  endelement
        Resources-->  endlement  

        但按这样的理解继承的org.xml.defaulthandler始终出不来想要的结果
        最后非常无奈,只能用下面的方式这样继承了一次org.xml.defaulthandler
        

 1 package com.Kiro.XMLHandler;
2
3 import org.xml.sax.Attributes;
4 import org.xml.sax.SAXException;
5 import org.xml.sax.helpers.DefaultHandler;
6
7 import android.util.Log;
8
9 public class XMLHandler extends DefaultHandler {
10 private int index=0;
11 private String tagname=null;
12 @Override
13 public void characters(char[] ch, int start, int length)
14 throws SAXException {
15 ++index;
16 System.out.println(new String(ch,start,length)+"----"+index);
17 super.characters(ch, start, length);
18 }
19
20 @Override
21 public void endDocument() throws SAXException {
22 System.out.println("End Document");
23 super.endDocument();
24 }
25
26 @Override
27 public void endElement(String uri, String localName, String qName)
28 throws SAXException {
29 super.endElement(uri, localName, qName);
30 }
31
32 @Override
33 public void startDocument() throws SAXException {
34 System.out.println("Start Document");
35 super.startDocument();
36 }
37
38 @Override
39 public void startElement(String uri, String localName, String qName,
40 Attributes attributes) throws SAXException {
41 tagname = localName;
42 Log.d("2", "1");
43 System.out.println(localName+"----"+"startelem");
44 super.startElement(uri, localName, qName, attributes);
45 }
46
47 }



       输出结果显示,其实在任意两个标签间都调用了characters这个方法。。。例如xml文件的<Resources> 和 <Resource>这两个标签间的1是被输出了。。。所有在标签间的其他数字都被输出了出来直到13。。。我觉得这个现象非常奇怪,按理说应该在3 5 7 9 11被输出,也就是说只有3 5 7 9 11的地方调用characters方法阿.是我的理解不对??

posted on 2012-02-04 12:52  No.47  阅读(349)  评论(0编辑  收藏  举报

导航