XML和dom4j

0.xml文件的約束

常見的包括dtd和schema約束

1.dtd的創建

DTD(Document Type Definition),全稱爲文檔類型定義。用於約束xml文件。

步驟:
(1)xml有幾個元素,在dtd文件中就寫幾個 <!ELEMENT>語句
(2)判斷元素是簡單元素還是複雜元素
- 複雜元素:有子元素的元素 <!ELEMENT 元素名稱 (子元素)>
- 簡單元素:沒有子元素 <!ELEMENT 元素名稱 (#PCDATA)>
(3)需要在xml文件中引入dtd文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE person SYSTEM "1.dtd">
<person>
	<name>zhangsan</name>
	<age>20</age>
	<a>1111</a>
</person>

1.dtd:

<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>

2.dtd的三種引入方式

(1)引入外部的dtd文件

<!DOCTYPE 根元素名稱 SYSTEM "dtd路徑">

(2)使用內部的dtd文件

<!DOCTYPE 根元素名稱 [
		<!ELEMENT person (name,age)>
		<!ELEMENT name (#PCDATA)>
		<!ELEMENT age (#PCDATA)>
	]>

(3)使用外部的dtd文件(網絡上的dtd文件)
<!DOCTYPE 根元素 PUBLIC "DTD名稱" "DTD文檔的URL">
例如:

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">

3.dom和sax解析xml區別:

  • dom方式解析
    根據xml的層級結構在內存中分配一個樹形結構,把xml的標籤,屬性和文本都封裝成對象
    缺點:如果文件過大,造成內存溢出
    優點:很方便實現增刪改操作

  • sax方式解析
    採用事件驅動,邊讀邊解析
    從上到下,一行一行的解析,解析到某一個對象,返回對象名稱
    缺點:不能實現增刪改操作
    優點:如果文件過大,不會造成內存溢出,方便實現查詢操作

4.schema和dtd約束xml的區別

(1)schema符合xml的語法,使用xml語句。
(2) 一個xml中可以有多個schema,多個schema使用名稱空間區分(類似於java包名),而dtd文件只能引入一個
(3)dtd裏面有PCDATA類型,但是在schema裏面可以支持更多的數據類型。比如 年齡 只能是整數,在schema可以直接定義一個整數類型
(4)schema語法更加複雜,但是schema目前不能替代dtd,dtd很簡單

5.xml引入schema

在這裏插入圖片描述

6.sax的解析過程

在這裏插入圖片描述

7.dom4j支持xpath的操作

可以直接獲取到某個元素

  • 第一種形式:指定全路徑
    /AAA/DDD/BBB: 表示一層一層的,AAA下面 DDD下面的BBB
  • 第二種形式:指定名稱
    //BBB: 表示和這個名稱相同,表示只要名稱是BBB,都得到
  • 第三種形式:所有
    /*: 所有元素
  • 第四種形式:指定名稱和索引
    BBB[1]: 表示第一個BBB元素
    BBB[last()]:表示最後一個BBB元素
  • 第五種形式:指定名稱和id
    //BBB[@id]: 表示只要BBB元素上面有id屬性,都得到
  • 第六種形式:指定名稱和具體id
    //BBB[@id='b1'] 表示元素名稱是BBB,在BBB上面有id屬性,並且id的屬性值是b1

dom4j裏面提供了兩個方法,用來支持xpath

selectNodes("xpath表達式"):獲取多個節點
selectSingleNode("xpath表達式"):獲取一個節點
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章