java 中的xml操作
XML
全稱為Extensible Markup Language
可擴充套件標記語言。一般作為配置檔案,可在網路中傳輸。
和html的區別是,它的語法規定更加嚴格,同時,xml中的標籤都是自定義的,而html中的標籤是預定義的。
xml一般用來儲存資料,而html一般用來展示資料。
xml文件的第一行必須為形如<?xml 屬性列表 ?>
的文件宣告。必須要有一個根標籤,標籤必須正確關閉。同時和html不同xml的標籤區分大小寫。屬性值必須使用單雙引號包裹。
<?xml version="1.0" encoding="utf-8" standalone="no" ?>
一般xml文件宣告格式如上,但是standalone一般不寫,該屬性的含義是是否依賴其他檔案,取值只有yes/no。version屬性表示採取的xml版本,常用的是1.0版本,encoding表示此文件內容採用的編碼格式。
當需要原樣展示資料時,可以將內容放到CDATA區中。
約束
約束定義了xml的書寫規則。
通常有兩種定義約束的方式:
- DTD 該方式使用較為簡單
- Schema 該方式使用較為複雜,當約束更加詳細
使用DTD約束有兩種方式,一種時將約束規則定義在xml文件中。
另外一種時將DTD規則定義在外部的DTD檔案中。
-
使用本地DTD規則
<!DOCTYPE 根標籤名 SYSTEM "dtd檔案位置">
-
使用網路DTD規則
<!DOCTYPE 根標籤名 PUBLIC "dtd檔名" "dtd檔案URL">
操作xml文件
操作xml文件,有兩種行為:
-
解析 也就是將xml資料讀入到記憶體
-
寫入 也就是修改xml資料
xml解析方式
xml文件有兩種解析方式:
-
DOM 方式 將標記語言一次性載入新記憶體,在記憶體中形成一顆DOM樹
優點:操作方便,可以對文件進行crud的所有操作
缺點:消耗記憶體
-
SAX 逐行讀取,基於事件驅動
優點:記憶體消耗小
缺點:只能讀取,不能增刪改
xml常見解析器
xml常見解析器有如下幾種:
-
JAXP:SUN公司提供的解析器,支援dom和sax兩種實現 劣質
-
DOM4J:
-
jsoup:HTML解析器,解析xml無問題 推薦
-
PULL:Android系統內建解析器,sax方式
Jsoup
本來是用來解析html文件的解析器,但是同為標記語言,解析xml也沒有問題。
使用parse靜態方法解析xml文件,返回一個Document物件。
Document物件
Document 文件物件,代表記憶體中的dom樹 繼承自Element。
Elements 物件
繼承自ArrayList<Element>
類,相當於Element物件的容器。通常在選擇某些節點是返回該物件。
Element 物件
該物件相當於一個標籤節點。是一個較為基礎的物件,Document類同樣繼承自該類。
常用函式函式有:
getElementsByTag 根據標籤名稱返回Elements
getElementsByAttribute 根據屬性名稱獲取元素物件
getElementsByAttributeValue 根據屬性值獲取元素物件
attr 獲取屬性值
text 獲取標籤內的文字內容(包含子標籤內的文字內容)
html 獲取html/xml內容
Node物件
Node物件,為Element的基類
快捷選擇方式
select CSS選擇器方式
XPath xml路徑語言,用於在xml中查詢資訊。
使用jsoupXpath需要額外的jar包