java基础篇---XML解析(一)

XML是可扩展标记语言

  在XML文件中由于更多的是描述信息的内容,所以在得到一个xml文档后应该利用程序安装其中元素的定义名称去除对应的内容,这样的操作称为XML解析。

  在XML解析中W3C定义SAX和DOM两中解析方式,这两种解析方式的程序操作如下图:

 

  从图中可以看出,应用程序不是直接对XML文档进行操作的,而是首先由XML分析其对XML文档进项分析,然后应哟程序通过XML分析器所提供的DOM接口或SAX接口对分析结果进项操作,从而间接实现了对XML文档的访问。下面进行具体操作

  DOM解析

  DOM模式解析XML,是把整个XML文档当成一个对象来处理,会先把整个文档读入到内存里。是基于树的结构,通常需要加载整文档和构造DOM树,然后才能开始工作。

dom_demo.xml文件

<?xml version="1.0" encoding="GBK"?>
<addresslist>
    <linkman>
        <name>żmyҮ</name>
        <email>oumyye@163.com</email>
    </linkman>
    <linkman>
        <name>oumyye</name>
        <email>oumyye@qq.com</email>
    </linkman>
</addresslist>

DOMDemo.java解析文件

package com.xml.dom解析 ;
import java.io.* ;
import org.w3c.dom.* ;
import javax.xml.parsers.* ;
public class DOMDemo {
    public static void main(String args[]) throws Exception {
        // 取得DocumentBuilderFactory类的对象
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance() ;
        // 取得DocumentBuilder类的对象
        DocumentBuilder build = factory.newDocumentBuilder()  ;
        Document doc = build.parse(new File("E:" + File.separator + "dom_demo.xml")) ;
        NodeList nl = doc.getElementsByTagName("name") ;
        // 输出节点
        System.out.println("姓名:" + nl.item(0).getFirstChild().getNodeValue()) ;
    }
}

运行结果:

  SAX解析

  SAX与DOM操作不同的是,SAX采用了是一种顺序模式进行访问,是一种快速读取XML 数据的方式,当使用SAX解析器进行操作时会触发一系列事件,如下图所示,当扫描到文档开始与结束,元素开始与结束时都会调用相关的处理方法,并作出相应的操作。

sax_demo.xm文件

<?xml version="1.0" encoding="GBK"?>
<addresslist>
    <linkman id="omy" name="裤">
        <name>偶my耶</name>
        <email>oumyye@163.com</email>
    </linkman>
    <linkman id="ol" name="外">
        <name>偶啦</name>
        <email>oumyye@qq.com</email>
    </linkman>
</addresslist>

MySAX.java 源代码:

package com.xml.sax解析;

import java.io.File;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.*;
import org.xml.sax.helpers.*;

public class MySAX extends DefaultHandler {
    public void startDocument() throws SAXException {
        System.out.println("<?xml version=\"1.0\" encoding=\"GBK\">");
    }

    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        System.out.print("<");
        System.out.print(qName);
        if (attributes != null) { // 如果存在了属性
            for (int x = 0; x < attributes.getLength(); x++) {
                System.out.print(" " + attributes.getQName(x) + "=\""
                        + attributes.getValue(x) + "\"");
            }
        }
        System.out.print(">");
    }

    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        System.out.print("<");
        System.out.print(qName);
        System.out.print(">");
    }

    public void characters(char[] ch, int start, int length)
            throws SAXException {
        System.out.print(new String(ch, start, length));
    }

    public void endDocument() throws SAXException {
        System.out.println("文档结束。。。");
    }

    public static void main(String args[]) throws Exception {
        // 建立SAX解析工厂
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser parser = factory.newSAXParser();
        parser.parse("e:" + File.separator + "sax_demo.xml", new MySAX());
    }
}

  解析结果:

下面我们来看下DOM和SAX的区别:

posted @ 2015-01-12 15:12  偶my耶  阅读(798)  评论(0编辑  收藏  举报