XML相關知識

1.xml概述
1.1xml:xml一種數據存儲格式,這種數據存儲格式在存儲數據內容的同時,還能夠保存數據之間的關係
1.2xml保存數據的方法:xml利用標籤來保存數據的內容,利用標籤之間的嵌套關係來保存數據之間的關係。
1.3xml的應用場景:
1.3.1利用xml跨平臺的特性,用來在不同的操作系統不同的開發語言之間傳輸數據。如果說java是一門跨平臺的語言,那xml就是跨平臺的數據。
1.3.2利用xml可以保存具有關係的數據的特性,還常常被用來做爲配置文件使用。,
1.4xml文件:把xml格式的數據保存到文件中,這樣的文件通常起後綴名爲.xml,這樣的文件就叫做xml文件,xml文件是xml數據最常見的存在形式,但是,這不是xml的唯一存在形式(在內存中或在網絡中也可以存在),不要把xml狹隘的理解成xml文件。
1.5xml校驗:瀏覽器除了內置html解析引擎外還內置了xml解析器,利用瀏覽器打開xml格式的數據,就可以進行xml校驗。
2.xml語法
2.1文檔聲明:一個格式良好的xml必須包含也只能包含一個文檔聲明,並且文檔聲明必須出現在xml文檔第一行,其前不能有其他任何內容。
2.1.1最簡單的寫法:<?xml version="1.0" ?>其中的version代表當前xml所遵循的規範版本。
2.1.2使用encoding屬性指定文檔所使用的字符集編碼:<?xml version="1.0" encoding="gb2312" ?>
注意:encoding屬性指定的編碼集和xml真正使用的編碼應該一致,如果不一致就會有亂碼問題。
encoding屬性默認值爲老外喜歡的iso8859-1
2.1.3使用standalone屬性指定當前xml文檔是否是一個獨立文檔:<?xml version="1.0" standalone="no" ?>,standalone默認值爲yes表示是一個獨立文檔。
注意:很多的解析器會忽略這個屬性,但是學習知識要按標準去學,所以這個屬性也要掌握。
2.2元素
2.2.1元素分爲開始標籤和結束標籤,在開始標籤和結束標籤之間的文本稱爲標籤體,如果一個標籤即不含標籤體也不包含其他標籤,那這樣的標籤可以把開始標籤和結束標籤進行合併,這樣的標籤叫自閉標籤。
<a>xxxxx</a>   <a/>
2.2.2一個元素也可以包含若干子元素,但是要注意所有的標籤都要進行合理嵌套。
2.2.3一個格式良好的xml文檔應該具有並且只能有一個跟標籤,其他標籤都應該是這個跟標籤的子孫標籤。
2.2.4元素的命名規範:
區分大小寫,例如,<P>和<p>是兩個不同的標記。
不能以數字或標點符號或"_"開頭。
不能以xml(或XML、或Xml 等)開頭。
不能包含空格。
名稱中間不能包含冒號(:)
2.3屬性
一個元素可以包含多個屬性,屬性的值要用單引號或雙引號括起來。如果屬性的之中包含雙引號,就要用單引號了。
屬性的命名規範,參照元素的命名規範。
2.4註釋
<!--這是一段註釋-->
注意:註釋不能出現在文檔聲明之前。實驗:把註釋寫到文檔聲明之前,用ie打開是沒問題,但是用chrome打開是報錯的。這就看出來了不同的解析器有不同的處理,我們學習的時候還是按標準去學。
註釋不能嵌套註釋
2.5CDATA區、轉義字符
都可以用來轉義特殊字符。
2.5.1CDATA區<![CDATA[這是要轉義的內容]]>
被CDATA區擴起來的內容,將會被瀏覽器當作文本來處理。
2.5.2轉義字符
& --> &amp;
< --> &lt;
> --> &gt;
" --> &quot;
' --> &apos;  
2.5.3CDATA區和轉義字符的區別
(1)CDATA區可以成段的進行轉義,而轉義字符一次只能轉義一個字符
(2)CDATA區轉義的字符可以保存數據本來的格式只是通知解析器按文本去處理。轉義字符改變了數據本身的內容,利用其他字符替代了轉義字符。請思考,如果要轉義的內容是一段js程序的話,如果用轉義字符合適不合適?
2.6處理指令:一段指令通知解析器以何種方式解析xml
<?xml-stylesheet type="text/css" href="1.css" ?>指定解析器使用1.css去渲染當前的xml數據
其實文檔聲明就是一個最常見的處理指令。
3.DTD技術
3.1DTD是一門xml約束技術,用來約束xml寫法。
3.2如何在xml中引入一個DTD
3.2.1外部引入:dtd約束文件存在在一個外部文件中,我們在xml中引入該約束。
(1)本地文件引入:該dtd文件存在在本地硬盤中
<!DOCTYPE 根元素的名稱 SYSTEM "文件所在的路徑">
(2)公共位置文件引入:dtd約束文件存在在一個公共網絡上,我們在xml引入該約束
<!DOCTYPE 根元素的名稱 PUBLIC "dtd名稱" "dtd所在的URL">
3.2.2在xml內部寫dtd約束
在文檔聲明下<!DOCTYPE 根元素名稱 [dtd約束的內容]>
3.3利用dtd約束xml中的元素
<!ELEMENT 元素名稱 元素約束> 
3.3.1元素約束
(1)存放類型
ANY:當前聲明的元素可以包含任意子元素
EMPTY:當前聲明的元素不能包含任何元素
(2)存放內容:利用小括號括起來的元素的名稱,用來表示該元素中可以存放哪些內容
<!ELEMENT "元素名" (可以包含的元素的名稱)>
小括號中的內容,可以有多個子元素的名稱
如果用“,”分割這些子元素就表明這些子元素必須按指定的順序出現
如果用“|”分割這些內容就表明這些子元素只能出現其中之一
使用“+”來表明內容可以出現一次或多次
使用“*”來表明內容可以出現零次或多次
使用“?”來表明內容可以出現零次或一次
#PCDATA表明該元素可以包含標籤體
可以利用()進行組操作:
<!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>
3.4利用dtd約束xml中的屬性
<!ATTLIST 元素名
屬性名 屬性類型 屬性約束
。。。。>
3.4.1屬性類型
(1)CDATA:表明該屬性的值是一個普通的文本值。
(2)ENUMERATED:表明該屬性的值只能取指定範圍內的其中之一
(3)ID:表明該屬性值在整個文檔中必須唯一,注意ID類型的屬性的值必須以字母下劃線開頭,並且不能以數字開頭,不能包含空白字符

3.4.2屬性約束
(1)#REQUIRED 來表明當前這個屬性是必須存在的屬性
(2)#IMPLIED 來表明當前這個屬性是可選的屬性
(3)#FIXED "固定值" 來表明當前這個屬性具有一個默認的值,可以不明確指定該屬性,解析器會幫你加上,如果你硬是指定了一個其他的值,會出錯。
(4)"默認值" 來表明當前屬性具有一個默認的值,如果給這個屬性指定一個值就用指定的值,如果不指定呢,就使用默認值。

3.5實體:可以理解爲對一段內容的引用,如果有一段內容到處在被使用,可以將其設計爲一個實體
3.5.1引用實體:用在xml中的實體
聲明實體:<!ENTITY 實體名稱 "實體內容">
引用引用實體:&實體名稱;

3.5.2參數實體:用在DTD文件中的實體
聲明實體:<!ENTITY % 實體名稱 "實體內容">
引用參數實體: %實體名稱;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章