首页 > 学院 > 开发设计 > 正文

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

2019-11-14 22:33:35
字体:
来源:转载
供稿:网友
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的区别:


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表