Javaweb入門20160301 ---xml入門

破玉發表於2016-03-01

 

一、xml語法
1.文件宣告
用來宣告xml的基本屬性,用來指揮解析引擎如何去解析當前xml
通常一個xml都要包含並且只能包含一個文件宣告
xml的文件必須在整個xml的最前面,在文件宣告之前不能有任何內容

<?xml version="1.0" ?>--version是必須存在的屬性,表明當前xml所遵循規範的版本,目前位置都寫1.0就可以了
<?xml version="1.0" encoding="utf-8" ?>--encoding用來只會解析引擎在解析xml時使用的編碼,一定要保證xml格式的資料在儲存時使用的編碼和解析時使用的編碼必須一致,才不會有亂碼問題
<?xml version="1.0" encoding="utf-8" standalone="yes" />--standalone屬性用來指明當前xml是否是一個獨立的xml,預設值是yes表明當前文件不需要依賴於其他文件,如果當前文件依賴其他文件而存在則需要將此值設定為no

2.元素
一個xml標籤就是一個元素
一個標籤分為開始標籤和結束標籤
在開始標籤和結束標籤之間可以包含文字內容,這樣的文字內容叫做標籤體
如果標籤的開始標籤和結束標籤之間不包含標籤和子標籤則可以將開始標籤和結束標籤進行合併,這樣的標籤就叫做自閉標籤
一個標籤中也可以包含任意多個子標籤,但是一定要注意標籤一定要合理巢狀
一個格式良好的xml要包含並且只能包含一個根標籤,其他的標籤都應該是這個標籤的子孫標籤

區分大小寫,例如,<P>和<p>是兩個不同的標記。
不能以數字或標點符號或"_"開頭。
不能以xml(或XML、或Xml 等)開頭。
不能包含空格
名稱中間不能包含冒號(:)。


3.屬性
一個標籤可以有多個屬性,每個屬性都有它自己的名稱和取值,例如:
<china capital="beijing"/>
屬性的名在定義時要遵循和xml元素相同的命名規則
屬性的值需要用單引號或雙引號括起來

4. 註釋
<!-- 註釋內容 -->
註釋可以出現在xml文件的任意位置除了整個文件的最前面.不能出現在文件宣告之前
註釋不能巢狀註釋


5.CDATA區/轉義字元
<![CDATA[轉義的內容]]>:
當XML中一段內容不希望被解析器解析時可以使用CDATA區將其包住
當解析器遇到CDATA區時會將其內容當作文字對待,不會進行解析
語法:<![CDATA[ 內容 ]]>

轉義字元:
& --> &amp;
< --> &lt;
> --> &gt;
" --> &quot;
' --> &apos;

6.處理指令
處理指令,簡稱PI (processing instruction)。處理指令用來指揮解析引擎如何解析XML文件內容。
<?xml-stylesheet type="text/css" href="1.css"?>



二、dtd語法 --- 瞭解語法,看得懂dtd就可以
1.如何在xml中引入dtd
(1)外部引入
可以將dtd的約束內容寫在外接的dtd檔案中,這個檔案字尾必須為.dtd而檔案儲存時必須用utf-8編碼儲存.
再在xml檔案中使用
<!DOCTYPE 根元素名稱 SYSTEM 檔案的位置>
如果寫的是SYSTEM表明當前引入的dtd在當前檔案系統中,後面制定的檔案位置是當前硬碟中的位置
<!DOCTYPE 文件根結點 PUBLIC "DTD名稱" "DTD檔案的URL">
如果寫的是PUBLIC表明當前引入的dtd在網路公共位置中,後面要指明dtd的名字和dtd所在網路位置URL地址
(2)內部引入
直接在xml中書寫dtd
<!DOCTYPE 根元素名稱[
dtd約束....
]>

2.dtd語法
(1)元素
<!ELEMENT 元素名稱 元素約束>
元素約束:
存放型別:ANY/EMPTY
元素約束:子元素的列表,將可以包含的子元素用小括號括起來
子元素之間可以使用逗號進行分割,表明子元素必須按照順序出現
子元素之間可以使用豎線進行分割,表面子元素出現其中之一
#PCDATA 表明包含標籤體

+ 表示一次或多次
* 0次或多次
? 0次或一次

也可以使用小括號進行組的操作


(2)屬性
<!ATTLIST 元素名
屬性名 屬性型別 屬性約束
屬性名2 屬性型別 屬性約束
......
>

屬性型別:
CDATA:表示屬性的值是一個普通字串
ENUMERATED : 屬性的值是一個列舉列表中的值
ID: 表明屬性的值必須在整個文件中都是唯一的,如果有重複的id則校驗不通過,ID 屬性的值只能由字母,下劃線開始,不能使用數字,不能出現空白字元

屬性約束:
#REQUIRED --- 表明當前屬性是一個必須存在的屬性,如果這樣的屬性不存在則在校驗時會報錯
#IMPLIED --- 表明當前屬性是一個可選的屬性,可以有也可以沒有
#FIXED '固定值' --- 表明當前屬性具有一個固定值,這樣的屬性不需要進行賦值,自動就會取這個固定值為值.如果這樣的屬性指定了一個不是固定值的值則校驗報錯
'預設值' --- 表明當前屬性具有一個預設值,如果給了其他的值就用其他值,如果沒有給值則取這個預設值


(3)ENTITY(實體)
<!ENTITY >,就是對一大段內容的引用,可以簡化程式碼的複用

引用實體:在xml中引用的實體叫做引用實體
<!ENTITY 實體名稱 “實體內容” >
&實體名稱;

引數實體:在dtd中引用的實體叫做引數實體
<!ENTITY % 實體名稱 "實體內容">
%實體名稱;


三、XML程式設計:利用java程式去增刪改查(CRUD)xml中的資料

解析思想:
dom解析
sax解析
基於這兩種解析思想市面上就有了很多的解析api
sun jaxp既有dom方式也有sax方式,並且這套解析api已經加入到j2se的規範中,意味這不需要匯入任何第三方開發包就可以直接使用這種解析方式.但是這種解析方式效率低下,沒什麼人用.
dom4j 可以使用dom方式高效的解析xml.
pull

!!dom4j
匯入開發包,通常只需要匯入核心包就可以了,如果在使用的過程中提示少什麼包到lib目錄下在匯入缺少的包即可


四、Schema -- xml的約束技術 --- 需要掌握名稱空間的概念,會讀簡單的Schema就可以了,不需要大家自己會寫

Schema是xml的約束技術,出現的目的是為了替代dtd
本身也是一個xml,非常方便使用xml的解析引擎進行解析
對名稱空間有非常好的支援
支援更多的資料型別,並且支援使用者自定義資料型別
可以進行語義級別的限定,限定能力大大強於dtd
相對於dtd不支援實體
相對於dtd複雜的多,學習成本比較的高

如何在xml中引入Schema --- !!!!!名稱空間的概念:全世界獨一無二的名字,用來唯一的標識某個資源,通常是公司的域名,只是名字而已並不真的表示資源的位置.


~~~ Schema的語法---參照Schema的文件,瞭解即可

 

 筆記來源於網路

 

相關文章