XML解析之DOM解析和SAX解析

前端之家收集整理的这篇文章主要介绍了XML解析之DOM解析和SAX解析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

XML

基础知识

XML:Extensible Markup Language(可扩展标记语言),一种用来存储和传输数据的源语言。

XML的作用:存储数据和传输数据

XML与HTML的区别:

@H_404_28@
  • HTML由W3C规范和定义;
  • XML可由用户自定义
  • XML定义和规范了HTML。
  • XML的优点:

    @H_404_28@
  • XML简化了数据的传输;
  • XML简化了数据的共享;
  • XML简化了平台的变更。
  • XML的解析方法

    DOM解析(Document Object Model)

    DOM解析:通过在内存中生成DOM树进行解析,它会将整个XML文件一次性装载进内存,然后进行解析,对内存的压力比较大,不适合解析大型XML文件

    DOM解析的优缺点:

    优点:方便进行遍历及操作节点

    缺点:对内存压力大

    DOM解析XML实例:

    jdbc.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <jdbc>
    	<config><key>url</key><value>jdbc:oracle:thin:@localhost:1521:ORACLE</value></config>
    	<config><key>username</key><value>scott</value></config>
    	<config><key>password</key><value>tiger</value></config>
    	<config><key>driver</key><value>oracle.jdbc.OracleDriver</value></config>
    </jdbc>

    DOM解析XML工具类
    package com.csdn.util;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    
    import org.w3c.dom.Document;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
    
    /**
     * XMLDomParseUtil:Dom解析XML文件的工具类
     * @author Gansuper
     * @time 2014年5月10日
     */
    public class XMLDomParseUtil {
    	/**
    	 * @功能 解析XML文件
    	 * @return Map<String,String>
    	 */
    	public static Map<String,String> domParseXML(){
    		Map<String,String> map = null;
    		//获得DocumentBuilderFactory对象实例
    		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    		try {
    			DocumentBuilder db = dbf.newDocumentBuilder();
    			Document document = db.parse("src/com/csdn/util/jdbc.xml");
    			NodeList config = document.getElementsByTagName("config");
    			map = new HashMap<String,String>();
    			for(int i=0;i<config.getLength();i++){
    				//获得节点
    				Node node = config.item(i);
    				//获得第一个子节点
    				Node fnode = node.getFirstChild();
    				String key = fnode.getTextContent();
    				//获得下一个兄弟节点
    				Node nnode = fnode.getNextSibling();
    				String value = nnode.getTextContent();
    				map.put(key,value);
    			}
    		} catch (ParserConfigurationException e) {
    			e.printStackTrace();
    		} catch (SAXException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		return map;
    	}
    	public static void main(String[] args) {
    		Map<String,String> map = domParseXML();
    		String url = map.get("url");
    		System.out.println(url);
    		String username = map.get("username");
    		System.out.println(username);
    		String password = map.get("password");
    		System.out.println(password);
    		String driver = map.get("driver");
    		System.out.println(driver);
    	}
    }

    SAX解析(Simple API For XML)

    SAX解析:一种流式解析,边读取xml文件边解析,解析服务器内存压力比较小,适合解析比较大型的xml文件

    SAX解析的优缺点:

    优点:速度快,内存无压力

    缺点:不能对节点进行操作

    SAX解析实例:

    config.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <jdbc>
    	<config url = "jdbc:oracle:thin:@localhost:1521:ORACLE" 
    			username = "scott" 
    			password = "tiger" 
    			driver = "oracle.jdbc.OracleDriver">
    	</config>
    </jdbc>

    SAX解析XMl文件工具类

    package com.csdn.util;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    
    /**
     * XMLSaxParseUtil:SAX解析XML文件工具类
     * @author Gansuper
     * @time 2014年5月10日
     */
    public class XMLSaxParseUtil extends DefaultHandler{
    
    	private Map<String,String> map = new HashMap<String,String>();
    	private String element = null;
    	private String value = null;
    	
    	public Map<String,String> getMap() {
    		return map;
    	}
    	
    	@Override
    	public void startDocument() throws SAXException {
    		System.out.println("Start Document !");
    	}
    	/**
    	 * @param uri 表示当前标签的命名空间
    	 * @param localName 表示当前文档的本地名称
    	 * @param name 表示标签名称
    	 * @param attributes 属性数组
    	 * @throws SAXException 
    	 * */
    	@Override
    	public void startElement(String uri,String localName,String name,Attributes attributes) throws SAXException {
    		System.out.println(name + " start element !");
    		for(int i=0;i<attributes.getLength();i++){
    			element = attributes.getQName(i);
    		    value = attributes.getValue(i);
    			System.out.println(element+" = "+value);
    			map.put(element,value);
    		}
    	}
    	/**
    	 * @param ch 当前标签标签内容
    	 * @param start 标签内容的开始位置
    	 * @param length 当前标签内容的长度
    	 * @throws SAXException 
    	 * */
    	@Override
    	public void characters(char[] ch,int start,int length) throws SAXException {
    
    	}
    	/**
    	 * @param uri 表示当前标签的命名空间
    	 * @param localName 表示当前文档的本地名称
    	 * @param name 表示标签名称
    	 * @throws SAXException 
    	 * */
    	@Override
    	public void endElement(String uri,String name)throws SAXException {
    		System.out.println(name + " end element !");
    	}
    
    	@Override
    	public void endDocument() throws SAXException {
    		System.out.println("End Document !");
    	}
    	
    	public static void main(String[] args) {
    		try {
    			SAXParserFactory spf = SAXParserFactory.newInstance();
    			SAXParser sp = spf.newSAXParser();
    			XMLSaxParseUtil handler = new XMLSaxParseUtil();
    			sp.parse("src/com/csdn/util/config.xml",handler);
    			Map<String,String> map = handler.getMap();
    			String url = map.get("url");
    			System.out.println("url = "+url);
    			String username = map.get("username");
    			System.out.println("username = "+username);
    			String password = map.get("password");
    			System.out.println("password = "+password);
    			String driver = map.get("driver");
    			System.out.println("driver = "+driver);
    		} catch (ParserConfigurationException e) {
    			e.printStackTrace();
    		} catch (SAXException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		
    	}
    }
    
    原文链接:https://www.f2er.com/xml/298685.html

    猜你在找的XML相关文章