JAXP学习总结

jopen 12年前

1.JAXP简介

和DOM一样,都是一种XML解析技术。JAXP开发包是JavaSE的一部分

在javax.xml.parsers包中,定义了几个工厂类,通过调用这些工厂类,可以得到对XML文档进行解析的DOM或SAX的解析器对象

2.SAX解析的特点

不同于DOM解析,SAX无需加载整个XML文档,即在读取文档的时候便对文档进行处理

SAX采用事件处理的方式解析XML文件,利用SAX解析XML文档,涉及 解析器 和 事件处理器 两个部分。

    解析器:可以使用JAXP的API创建,创建出SAX解析器后,便可以指定解析器去解析某个XML文档。

    事件处理器:由程序员编写

3.DEMO

有如下XML文件car.xml

    <?xml version="1.0" encoding="UTF-8"?>        <车辆清单>            <汽车>                <车牌 出产时间="2011年">奥迪</车牌>                <产地>北京</产地>                <单价>30</单价>            </汽车>        </车辆清单>  
使用SAX解析该文件
    package web.java.xml.sax;                import java.io.File;                import javax.xml.parsers.SAXParser;        import javax.xml.parsers.SAXParserFactory;                import org.xml.sax.Attributes;        import org.xml.sax.helpers.DefaultHandler;                /**        * 基于SAX解析XML文件        * @author well        *        */        public class Demo1 {            public static void main(String[] args) throws Exception {                //创建SAX解析器工厂                SAXParserFactory factory = SAXParserFactory.newInstance();                //创建SAX解析器                SAXParser saxParser = factory.newSAXParser();                File file = new File("src/web/java/xml/sax/car.xml");                //加载XML文件                saxParser.parse(file, new MyHanler());            }        }                //自定义SAX处理器        class MyHanler extends DefaultHandler{            public void startElement(                    String uri,                     String localName,                     String qName,                     Attributes attributes){                System.out.println("<"+qName+">");                System.out.println("有"+attributes.getLength()+"个属性");                System.out.println(attributes.getValue("出产时间"));            }             public void endElement(                    String uri,                     String localName,                     String qName){                System.out.println("</"+qName+">");            }             public void characters(                    char[] ch,                     int start,                     int length){                String content = new String(ch,start,length);                if(content.trim().length()>0){                    System.out.println(content);                }            }         }  

来自:http://blog.csdn.net/tao_sun/article/details/9004829