• 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的区别:

  • 相关阅读:
    HTTP协议【详解】——经典面试题
    原生JS的地区二级联动,很好理解的逻辑
    js操作字符串的常用方法
    移除input框type="number"在部分浏览器的默认上下按钮
    atom
    解决gitHub下载速度慢的问题
    ATOM常用插件推荐
    脚踝扭伤肿了怎么办
    这才是真正的电子科大
    月入 7000,怎么存钱?
  • 原文地址:https://www.cnblogs.com/oumyye/p/4218464.html
Copyright © 2020-2023  润新知