XML中的XPATH、DTD

大家好,樂字節小樂又來了,上次給大家說道的是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技術乾貨請多關注樂字節,後續繼續奉獻!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章