SAX解析XML

sax解析特点:1、逐行读取

             2、事件处理-- 方法

             3、解析器调用相应的事件

                 4、只能读取文件

 

DefaultHandler 可以触发5个事件

        *startDocument()   开始文档

        *startElement()    开始元素

        *characters()      文本

        *endElement()      结束元素

        *endDocument()     结束文档

 

在startElement

 

    /**    
     * 如果xml文件使用了schema约束 <xs:element>
     *      * uri:schema -- targetNameSpace   
     *   * localName--element
     *   * qName---xs:element
     * 如果不使用
     *   * uri:null
     *   * localName:null
     *   * qName : element
     *   
     * Attributes:当前元素的所有的属性的集合
     */

 

1 //获得解析工厂实例
2         SAXParserFactory factory=SAXParserFactory.newInstance();
3         //获得解析器
4         SAXParser parser=factory.newSAXParser();
5         //解析xml
6         DefaultHandler dh=new MyDefaultHandler();  
7          
8         parser.parse("books.xml", dh);

 

 Demo

 1 public void SaxDemo() throws Exception
 2     {
 3         SAXParser parser= SAXParserFactory.newInstance().newSAXParser();
 4         parser.parse(Demo.class.getClassLoader().getResourceAsStream("users.xml"), new DefaultHandler(){
 5             private boolean nameOrAge=false;
 6             @Override
 7             public void startElement(String uri, String localName,
 8                     String qName, Attributes attributes) throws SAXException {
 9                 if(qName.equals("user"))
10                 {
11                     System.err.println(attributes.getValue("id"));
12                 }
13                 else if(qName.equals("name") || qName.equals("age")){
14                     nameOrAge=true;
15                 }
16             }
17             
18             @Override
19             public void endElement(String uri, String localName, String qName)
20                     throws SAXException {
21                 if(qName.equals("name")|| qName.equals("age"))
22                 {
23                     nameOrAge=false;
24                 }
25             }
26             
27             @Override
28             public void characters(char[] ch, int start, int length)
29                     throws SAXException {
30                 if(nameOrAge)
31                 {
32                     String value=new String(ch,start,length);
33                     System.err.println(value);
34                 }
35             }
36             
37         });
38     }

 

 

 

posted @ 2014-11-06 16:43  liuwt365  阅读(233)  评论(0)    收藏  举报