XML
基础知识
XML:Extensible Markup Language(可扩展标记语言),一种用来存储和传输数据的源语言。
XML的作用:存储数据和传输数据
XML与HTML的区别:
- HTML由W3C规范和定义;
- 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解析的优缺点:
优点:速度快,内存无压力
缺点:不能对节点进行操作
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();
}
}
}
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|