该程序是如何调用characters1(char ch[], int start, int length)和startElement(String uri,String localName,String qName,Attributes attrs)?
不像是继承过来的方法?

package SAX;import org.xml.sax.*; 
import org.xml.sax.helpers.*; 
import javax.xml.parsers.*; public class MyXMLReader extends DefaultHandler { java.util.Stack tags = new java.util.Stack(); 
public MyXMLReader() { 
super(); 
} public static void main(String args[]) { 
long lasting = System.currentTimeMillis(); 
try {
SAXParserFactory sf = SAXParserFactory.newInstance(); 
SAXParser sp = sf.newSAXParser(); 
MyXMLReader reader = new MyXMLReader(); 
sp.parse(new InputSource("data_10k.xml"), reader); 
} catch (Exception e) { 
e.printStackTrace(); 

System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + " 毫秒"); 
} public void characters1(char ch[], int start, int length) throws SAXException { 
   System.out.println("characters()");
String tag = (String) tags.peek(); 
if (tag.equals("NO")) { 
System.out.print("车牌号码:" + new String(ch, start, length)); 

if (tag.equals("ADDR")) { 
System.out.println(" 地址:" + new String(ch, start, length)); 

} public void startElement(String uri,String localName,String qName,Attributes attrs)

   System.out.println("startElement().qName:"+qName);
   tags.push(qName); 

}

解决方案 »

  1.   

    data_10k.xml:
    <?xml version="1.0" encoding="GB2312"?>
    <RESULT>
    <VALUE>
    <NO>A1234</NO>
    <ADDR>四川省XX县XX镇XX路X段XX号</ADDR>
    </VALUE>
    <VALUE>
    <NO>B1234</NO>
    <ADDR>四川省XX市XX乡XX村XX组</ADDR>
    </VALUE>
    </RESULT>
      

  2.   

    是sp.parse方法中,会调用在解释的过程中调用第二个参数的Handler中的方法啊这个调用是由SAXParser的实现类调用的
      

  3.   

    你指的是
    reader.setContentHandler(dh);
                reader.setEntityResolver(dh);
                reader.setErrorHandler(dh);
                reader.setDTDHandler(dh);它们吗?
      

  4.   

    如果characters1(char ch[], int start, int length)和startElement(String uri,String localName,String qName,Attributes attrs)改了了名字,无法解析xml的
      

  5.   

    SAXParser sp = sf.newSAXParser(); 
    sp.parse(new InputSource("data_10k.xml"), reader),这个sp会一边解析XML,一边调用reader中的相应方法,如果reader一定会有characters和startElement方法的,否则根本不会编译过。如果只是你没有覆盖,那么也只是因为DefaultHandler中已经有默认实现罢了。XMLReader会有很多实现类包含dom4j xereces xalan之类,不知道你指哪个
      

  6.   

    如果reader一定会有characters应该去掉【如果】两个字
      

  7.   

    有什么不明白?你调用 SAXParser sp ...
    sp.parse(inputsource, reader)的时候,SAXParser会根据InputSource开始读取XML文件,然后根据XML的内容调用reader中的方法,例如
    <?xml version="1.0" encoding="GB2312"?>
    <RESULT>
    <VALUE>
    <NO>A1234</NO>
    sp就会分别调用
    reader.startDocument()
    reader.startElement("RESULT");
    reader.startElement("VALUE");
    reader.startElement("NO");
    reader.character("A1234");
    reader.endElement("NO");这个调用是由SAXParsr一边读取XML文件,一边判断应该调用reader中的哪个方法