一.XML概述
定義:Extensible Makeup Language(可擴展標記語言);
作用:
1.存儲數據,有良好的存儲格式,多種語言通用
2.作爲配置文件,許多框架都使用xml作爲配置文件
語法:
1.文件後綴名必須爲.xml;
2.文檔聲明必須寫在第一行,且前面不能空格,一般寫法:<?xml version="1.0" encoding="UTF-8"?>;
3.註釋格式:<?-- -->(ST快捷鍵 ctrl+shift+/);
4.元素(標籤):xml文件的基本組成部分,由開頭和結尾組成:開頭由一對<>和元素名組成;結尾<>內多一正斜槓,如:<Peson></Person>;
5.根元素:最先出現的元素,根元素只有一對;
6.元素體:元素兩個<>中出現的文本,如<Person>text</Person>中的text稱爲元素體;
7.屬性:元素的組成部分,寫在開始標籤裏.屬性名必須以英文字母開頭,不能有空格且不能重複,格式爲:屬性名=屬性值,屬性值需用""或''包裹,如<Person id="001"></Person>,id即爲屬性
8.轉義字符:> ----- < < ---- > " ---- " ' ---- ' & ---- &
9.CDATA區:格式<?[CDATA[--內容--]]>,內容區直接原樣展示,不被xml解析器解析;
關於文檔聲明的補充:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
1.聲明語句必須有version屬性,encoding和standalone是可選的;
2.三個屬性同時存在時必須按上述順序排列;
3.如果沒有聲明encoding屬性,則解析時默認採用uft-8或utf-16;如果不聲明,解析器也不支持utf-8吉utf-16,則引起解析出錯;
4.standalone只有兩個值"yes"或"no",no表示文檔可能依賴於一個DTD文件存在;yes表示可以獨立存在.
二.XML解析
兩種方式:
SAX解析:逐行解析;效率高,不易出現內存不足的情況;但是隻能對xml解析,且不能進行增刪改的操作
DOM解析:將整個文件加載到內存中,形成一個Document對象,對該對象進行解析,優點是可以進行增刪改的操作,但是容易出現內存不足的情況
解析工具:常用工具爲dom4j.jar包
JAXP:sun公司提供支持DOM和SAX開發包
JDom:dom4j兄弟
jsoup:一種處理HTML特定解析開發包
dom4j:比較常用的解析開發包,hibernate底層採用。
三.Dom4j的常用API
SAXReader類:
定義:public class SAXReader extends Object
構造方法:
SAXReader()
普通方法:
public Document read(String systemId) throws DocumentException{}:根據路徑讀xml文件,得到一個文檔對象!
Document接口:
定義:public interface Document extends Branch
普通方法:
public Element getRootElement(){}:獲取根標籤對象
Element接口:
定義:
public interface Element extends Branch
普通方法:
public Element element(String name){}:Returns the first element for the given local name and any namespace.
public Element element(QName qName){}:Returns the first element for the given fully qualified name.
==========================================================================================================
public List elements(){}:獲取該標籤對象下的所有子標籤
public List elements(String name){}:面向該元素對象,獲取指定名稱的子標籤
public String attributeValue(String name){}:面向元素對象,根據屬性名獲取屬性值
public String getText(){}:面向該元素對象,獲取元素體;(如果元素體是一個標籤,會得到null)
=============================================================================================
public Iterator elementIterator(){}:Returns an iterator over all this elements child elements.
public Iterator elementIterator(QName qName){}:Returns an iterator over the elements contained in this element
which match the given fully qualified name.
public Iterator elementIterator(String name){}:Returns an iterator over the elements contained in this element
which match the given local name and any namespace.
=================================================================================================================
public String elementText(String name){}:
public String elementText(QName qname){}:
Node接口:
定義:public interface Node extends Cloneable
普通方法:
public String getName(){}:返回該節點對象的名稱
代碼演示:
import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class XmlTest { public static void main(String[] args) throws Exception { // 創建SAXReader對象 SAXReader sax = new SAXReader(); // 獲取Docu