大家好,樂字節小樂又來了,上次給大家說道的是XML解析,這次接着講述XML文檔中的語言:XPATH、DTD
一、先來說說XPATH
1、XPATH 概念
XPath 是一門在 XML 文檔中查找信息的語言,可用來在 XML 文檔中對元素和屬性進行遍歷。XPath 是 W3C XSLT 標準的主要元素,並且 XQuery 和 XPointer 同時被構建於 XPath 表達之上。因此,對 XPath 的理解是很多高級 XML 應用的基礎。XPath 非常類似對數據庫操作的 SQL 語言,或者說 JQuery,它可以方便開發者抓起文檔中需要的東西。(dom4j 也支持 xpath)
2.節點類型
XPath 中有七種結點類型:元素、屬性、文本、命名空間、處理指令、註釋以及文檔節點 (或稱爲根節點)。
文檔中存在元素節點,屬性節點,根節點
3.常用路徑表達式
表達式 描述
節點名稱(nodename) 選取此節點的所有子節點
/ 從根節點選取
// 從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置
. 選取當前節點
.. 選取當前節點的父節點
@ 選取屬性
示例如下:
//@lang 選取所有名爲 lang 的屬性
4.限定語
用來查找某個特定的節點或者包含某個指定的值的節點。以方括號括起
//book[price>35.00] 選擇所有 book 元素,且其中的 price 元素的值須大於 35.00
/bookstore/book[1] 選取屬於 bookstore 子元素的第一個 book 元素。
/bookstore/book[last()] 選取屬於 bookstore 子元素的最後一個 book 元素。
/bookstore/book[last()-1] 選取屬於 bookstore 子元素的倒數第二個 book 元素。
/bookstore/book[position()<3] 選取最前面的兩個屬於 bookstore 元素的子元素的 book 元素。
//title[@lang] 選取所有擁有名爲 lang 的屬性的 title 元素。
//title[@lang='eng'] 選取所有 title 元素,且這些元素擁有值爲 eng 的 lang 屬性。
/bookstore/book[price>35.00] 選取所有 bookstore 元素的 book 元素,且其中的 price
元素的值須大於 35.00。
/bookstore/book[price>35.00]/title 選取所有 bookstore 元素中的 book 元素的 title 元
素,且其中的 price 元素的值須大於 35.00。
5 .通配符
通配符 描述
- 匹配任何元素節點
@* 匹配任何屬性節點
node() 匹配任何類型的節點
| 選取若干路徑
使用示例
路徑表達式 結果
/bookstore/* 選取 bookstore 元素的所有子節點
//* 選取文檔中的所有元素
//title[@*] 選取所有帶有屬性的 title 元素。
//book/title | //book/price 選取所有 book 元素的 tilte 和 price 元素。
//title | //price 選取所有文檔中的 title 和 price 元素。
/bookstore/book/title | //price 選取所有屬於 bookstore 元素的 book 元素的 title 元素,以及文檔中所有的 price 元素
二、再說DTD
使用 DTD 可以對文檔的內容進行約束,XML 中的 DTD 數據必須用<!DOCTYPE>標記說
明,語法格式如下:
<!DOCTYPE 根元素名稱[DTD 定義數據]>
XML 的元素內容定義格式如下:
<!ELEMENT 元素內容描述字符串>
DTD 還可以描述子元素的結構,其使用語法:
<!ELEMENT 子元素結構名稱 子元素結構表達式>
其中子元素結構有以下幾種常用的定義方式:
1.按順序包括 B、C、D、的所有內容: <!ELEMENT A(B,C,D)>
2.在 A 中要包含 B、C、D、的任意一個的內容: <!ELEMENT A(B|C|D)>
3.在 A 中包含 0-1 個 B: <!ELEMENT A(B?)>
4.在 A 中要包含 1 次以上各 B: <!ELEMENT A(B+)>
5.在 A 中要包含 O 次以上各 B: <!ELEMENT A(B*)>
6.空元素 <!ELEMENT A EMPTY>
如:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persons[
<!ELEMENT persons (person+)>
<!ELEMENT person ( name , password? , age+) >
<!ATTLIST person sex (男|女) #REQUIRED>
<!ATTLIST person id ID #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT password (#PCDATA)>
<!ELEMENT age (#PCDATA)>
>
<persons>
<person sex="男" id="p1">
<name></name>
<password></password>
<age></age>
</person>
<person sex="女" id="p2">
<name></name>
<password></password>
<age></age>
</person>
</persons>
關於XML技術先就講到這裏了,更多Java技術乾貨請多關注樂字節,後續繼續奉獻!