zoukankan      html  css  js  c++  java
  • 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方法阿.是我的理解不对??

  • 相关阅读:
    hiveserver2 with kerberos authentication
    python Basic usage
    python Quicksort demo
    Python HeapSort
    mrunit for wordcount demo
    CCDH证书
    Hadoop question list
    Hadoop Yarn core concepts
    Hadoop Resource
    Hadoop could not find or load main class
  • 原文地址:https://www.cnblogs.com/Kiro/p/2337901.html
Copyright © 2011-2022 走看看