XML
基础知识
XML:Extensible Markup Language(可扩展标记语言),一种用来存储和传输数据的源语言。
XML的作用:存储数据和传输数据
XML与HTML的区别:
XML的优点:
- 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解析的优缺点:
原文链接:https://www.f2er.com/xml/298685.html优点:速度快,内存无压力
缺点:不能对节点进行操作
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(); } } }