XML、XML約束、XML解析、常用的xml解析器(DOM4J)、XPATH
XML的簡介
定義
HTML:超文本標記語言
XML:eXtensible Markup Language 可擴展標記語言 version="1.0"
- 可擴展:所有的標籤都是自定義的。
- 功能:數據存儲
- 配置文件(最主要的使用場景)
- 數據傳輸(一般不使用xml做數據傳輸,而使用json代替)
html與xml區別:
- html語法鬆散,xml語法嚴格
- html做頁面展示,xml做數據存儲
- html所有標籤都是預先定義好的,xml所有標籤都是自定義的
xml語法
文檔聲明:
- 必須寫在xml文檔的第一行。
- 寫法:
- <?xml version="1.0" ?>
- 屬性:
- version:版本號 固定值 1.0
- encoding:指定文檔的碼錶。默認值為 iso-8859-1
- standalone:指定文檔是否獨立 yes 或 no,是否受其他文件約束 ,
- yes - 不受其他文件約束; no - 受其他文件約束
- 跟約束文件相關的
元素:xml文檔中的標籤
- 文檔中必須有且只能有一個根元素(根標籤)
- 標籤需要正確閉合。 <student/> 或<name> </name>
- 標籤需要正確嵌套
- 標籤名稱要遵守:
- 標籤名稱區分大小寫
- 標籤名不能以數字開頭
文本:
- 轉義字元:> > ; < < ;
- CDATA : 中括弧內的數據會原樣顯示
- <![CDATA[ 數據內容 ]]>
屬性:
- 屬性值必須用引號引起來。單雙引號都可以
注釋:
<!-- -->
xml約束(了解):
定義
約束就是xml的書寫規則
約束的分類:
dtd(約束力度不夠,現在基本不使用):
dtd分類:
* 內部dtd:在xml內部定義dtd
* 外部dtd:在外部文件中定義dtd
* 本地dtd文件:<!DOCTYPE students SYSTEM "student.dtd">
* 網路dtd文件:<!DOCTYPE students PUBLIC "名稱空間" "student.dtd">
<!ELEMENT students (student*) > : 表示students標籤中可以有0-n個student標籤
<!ELEMENT student (name,age,sex)> : 表示student標籤中必須有name,age,sex並且順序要按這個來
<!ELEMENT student (name age sex)> : 表示student標籤中可以有name,age,sex
<!ELEMENT student (name|age|sex)> : 表示student標籤中只能有name,age,sex三個中的一個
schema(了解):
導入xsd約束文檔:
1、編寫根標籤
2、引入實例名稱空間 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3、引入名稱空間 xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"
4、引入默認的名稱空間
XML解析(重點)
解析xml的目的
- 用
Java代碼讀取xml中的數據
(最重要的) - 用Java代碼往xml中寫入數據 ( 幾乎用不到,只會出現在數據傳輸中,而數據傳輸基本不會使用xml 而使用 json )
xml的解析思路(了解)
DOM:將文檔載入進內存,形成一顆dom樹( document對象 ) ,將文檔的各個組成部分封裝為一些對象。
- 優點:在內存中會形成dom樹,寫代碼就非常方便,可以對dom樹進行增刪改查。
- 缺點:dom樹 非常占內存,解析速度慢。
SAX:逐行讀取,基於事件驅動
- 優點:不佔內存,解析速度快
- 缺點:只能讀取,不能回寫,而且使用不方便
常用的xml解析器
JAXP:sun公司提供的解析。支持dom和sax。(不常用)
JDOM(後來分裂了)
DOM4J(document for java 民間組織開發的,但是它是事實方式。非常好。 支持dom)
關鍵是獲取標籤,只要標籤獲取到了,那麼通過 attribute() 方法能獲取 屬性對象,通過 getText()方法能獲取標籤中的文本,通過 getName() 方法獲取標籤名
接下來的關鍵是:怎麼獲取標籤。有兩種方法: 迭代器, elements(), element (「標籤名」)
步驟:
- 1.導入jar包 dom4j.jar
- 2.創建解析器 SAXReader reader = new SAXReader();
- 3.解析xml 獲得 document 對象 Document document = reader.read( url ); 獲取根節點 Element root = documen.getRootElement()
關於DOM4J解析的總結:
1.獲取標籤
1.1 迭代器(比較麻煩)
1.2 elements() 獲取所有子標籤 elements("標籤名") 獲取指定標籤名的子標籤
2.獲取文本
getText()
3.獲取屬性
attributes() 獲取所有屬性 獲取的是Attribute對象的集合
attribute("屬性名") 獲取對應屬性名的一個屬性 獲取的是 Attribute 對象
使用attribute對象獲取屬性值 : getValue()
XPATH(屬於DOM4J中的,用於查詢特定的節點)
- 定義了一種規則。
- 使用的方法:
- selectSingleNode():
- selectNodes():
步驟:
- 1、注意:導包: jaxen...jar
- 2、
創建解析器
SAXReader reader = new SAXReader(); - 3、解析xml
獲得 document 對象
Document document = reader.read(url);
TAG:程序員小新人學習 |