SAX解析XML

有些话、适合烂在心里 提交于 2020-03-23 14:56:33

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     }

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!