【Java】【XML】SAX解析和DOM解析

转载自:http://blog.csdn.net/maniacer/article/details/51156322







保存
标签
2018-03-16
blog.csdn.net/maniacer/article/details/51156322

XML解析的两种方式

本文整理了XML解析的两种方式,分别是SAX解析和DOM解析

一、SAX解析

SAX解析是按照XML的标签顺序一步步的解析,首先加载document,然后按照顺序加载Element,在加载时我们可以设置监听事件,当加载document或者element时执行某些操作,直接上代码。

这里采用eclipse开发,XML文件放在project根目录下。
book.xml

<书架>
    <书>
        <书名>Java编程思想
        <作者>张孝祥
        <售价>
    
    <书>
        <书名>HTML5+CSS
        <作者>张孝祥
        <售价>108.8
    
SaxDemo.java
public class SaxDome {
    public static  (String[] args) throws Exception {
        //加载解析工厂
        SAXParserFactory factory = SAXParserFactory.newInstance();
        //通过工厂获取SAX解析器
        SAXParser sax = factory.newSAXParser();
        //获取读取器
        XMLReader reader = sax.getXMLReader();
        //注册事件处理器
        reader.setContentHandler( MyContentHandler());
        //解析XML
        reader.parse("country.xml");
    }
}
class MyContentHandler extends DefaultHandler {
    @Override
    public  startDocument() throws SAXException {
        // TODO Auto-generated method stub
        System.out.println("文档开始");
    }

    @Override
    public  startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        // TODO Auto-generated method stub
        System.out.println(qName + "标签开始");
    }

    @Override
    public  characters([] ch,  start,  length) throws SAXException {
        // TODO Auto-generated method stub
        System.out.println( String(ch,start,length));
    }

    @Override
    public  endElement(String uri, String localName, String qName) throws SAXException {
        // TODO Auto-generated method stub
        System.out.println(qName + "标签结束");
    }

    @Override
    public  endDocument() throws SAXException {
        // TODO Auto-generated method stub
        System.out.println("文档结束");
    }

}

1、优点:不需要等待整个XML加载到内存,当解析到某一部分时自动触发对应的方法去处理,效率比较高。理论上不论多大的XML文件都可以解读。
2、缺点:每次将诶西都只能处理一次,下次解析还要重新解析。

二、DOM解析

Dom解析是将xml文件全部载入,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件。
只接上代码,需要的朋友可以直接拷贝

查询:
@Test
    public  query() throws Exception{
        SAXReader reader =  SAXReader();
        Document dom = reader.read("country.xml");
        Element root = dom.getRootElement();
        List list = root.elements();
        Element book2 = list.get();
        String book2Name = book2.element().getText();
        System.out.println(book2Name);
    }
增加:
@Test
    public  () throws Exception{
        SAXReader reader =  SAXReader();
        Document dom = reader.read("country.xml");
        Element root = dom.getRootElement();
        Element book = root.element();

        Element price = DocumentHelper.createElement();
        price.setText();
        book.add(price);

        XMLWriter writer =  XMLWriter( FileOutputStream("country.xml"), OutputFormat.createPrettyPrint());
        writer.write(dom);
        writer.close();
    }
修改:
@Test
    public  update() throws Exception{
        SAXReader reader =  SAXReader();
        Document dom = reader.read("country.xml");
        Element root = dom.getRootElement();
        Element price = root.element().element();
        price.setText("4.0元");
        XMLWriter writer =  XMLWriter( FileOutputStream("country.xml"), OutputFormat.createPrettyPrint());
        writer.write(dom);
        writer.close();
    }
删除:
@Test
    public  remove() throws Exception{
        SAXReader reader =  SAXReader();
        Document dom = reader.read("country.xml");

        Element root = dom.getRootElement();
        Element price = root.element().element();
        price.getParent().remove(price);

        XMLWriter writer =  XMLWriter( FileOutputStream("country.xml"), OutputFormat.createPrettyPrint());
        writer.write(dom);
        writer.close();
    }

你可能感兴趣的:(android)