码迷,mamicode.com
首页 > 其他好文 > 详细

XML (二)

时间:2017-10-28 21:58:53      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:src   end   private   就会   相对   情况下   ade   创建   情况   

1 SAX

  • 在使用DOM解析XML文档的时候,需要读取整个XML文档,在内存中构架代表整个DOM树的Document对象,从而再对XML文档进行操作。此种情况下,如果XML文档特别大,就会消耗计算机的大量内存,并且容易导致内存溢出。
  • SAX解析允许在读取文档的时候,即对文档进行处理,而不必等到整个文档装载完才对文档进行操作。

 

  • SAX采用事件处理的方式解析XML文件,利用SAX解析XML文档,涉及两个部分:解析器和事件处理器:
    • 解析器可以使用JAXP的API创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档。
    • 解析器采用SAX方式在解析某个XML文档的时候,它只要解析到XML文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方式时,会把当前解析到的xml文件内容作为方法的参数传递给事件处理器。
    • 事件处理器由程序员编写,程序员通过事件处理器中方法的参数,就可以很轻松的得到SAX解析器解析到的数据,从而可以决定如何对数据进行处理。

 

  • 示例:通过SAX解析xml文档,并将数据封装到javabean中
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<书架> <> <书名>java从入门到放弃</书名> <作者>呵呵</作者> <售价>0.01</售价> </> <> <书名>c从入门到精通</书名> <作者>我好</作者> <售价>1.00</售价> </> </书架>
package com;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * 2017/10/28
 * 说明:
 */
public class SAXDemo {
    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        List<Book> books = new ArrayList<>();

        //使用SAXParserFactory创建SAX解析工厂
        SAXParserFactory spf = SAXParserFactory.newInstance();
        //通过SAX解析工厂得到解析对象
        SAXParser sp= spf.newSAXParser();
        //通过解析器对象得到一个XML的读取器
        XMLReader xmlReader = sp.getXMLReader();
        //设置读取器的事件处理器
        xmlReader.setContentHandler(new DefaultHandler(){
            private Book book = null;
            private String currentTagName;//当前读取的元素的名称


            public void startElement (String uri, String localName, String qName, Attributes attributes) throws SAXException {
                if("书".equals(qName)){
                    book = new Book();

                }
                currentTagName = qName;
            }
            public void endElement (String uri, String localName, String qName) throws SAXException {
                if("书".equals(qName)){
                    books.add(book);//读到书标记的结束,把书对象存起来
                }
                currentTagName = null;
            }
            public void characters (char ch[], int start, int length) throws SAXException {
                if("书名".equals(currentTagName)){
                    book.setName(new String(ch,start,length));
                }
                if("作者".equals(currentTagName)){
                    book.setAuthor(new String(ch,start,length));
                }
                if("售价".equals(currentTagName)){
                    book.setPrice(new String(ch,start,length));
                }
            }


        });
        //解析xml文件
        xmlReader.parse("D:\\code\\web\\src\\main\\webapp\\book.xml");
        for(Book b:books){
            System.out.println(b);
        }


    }
}

 

 

2 DOM4j

  • dom4j是一个简单、灵活的开发源代码的库。dom4j是由早起开发jdom的人分离出来而后独立开发的。与jdom不同的是,dom4j使用接口和抽象类,虽然dom4j的API相对复杂一些,但它提供了比jdom更好的灵活性。
  • dom4j是一个非常优秀的java XML API,并且性能优异、功能强大和极其使用的特点。

 

XML (二)

标签:src   end   private   就会   相对   情况下   ade   创建   情况   

原文地址:http://www.cnblogs.com/xuweiweiwoaini/p/7747917.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!