開發工具
junit單元測試
xml檔案的常見應用:
1、交換資料
2、設定檔
1.xml概述
1.1xml概念:xml本質上是一種資料存放區的格式,可以在儲存資料的同時儲存資料之間的關係。xml利用標籤來儲存資料的內容,利用標籤之間的嵌套關係來儲存資料之間的關係。
1.2xml運用情境
1.2.1資料轉送:xml本質上是一段字串,具有跨平台的特點,所有的開發語言、作業系統都支援,利用這樣的特點可以用xml進行跨平台跨語言的資料轉送。
1.2.2作為設定檔來使用:xml在儲存資料內容的同時也可以儲存資料之間的層級關係,利用這樣的特點,xml常備用來作為設定檔來用。
1.3xml檔案:將符合xml格式的資料寫入到一個檔案中去,那這樣的檔案就是一個xml檔案,這樣的檔案通常都以.xml做為尾碼名,請注意,不養將xml狹隘的理解成xml檔案,xml除了檔案形式外還可以以其他的形式存在(記憶體中構建或網路中傳輸).
1.4xml校正:瀏覽器除了內建html解析器外,還內建了xml解析器,利用這一點,我們可以使用瀏覽器對xml進行校正。如果xml符合規範,瀏覽器就正常開啟,如果不符合規範則提示錯誤資訊和錯誤行數。
2.xml文法
2.1文檔聲明:告訴解析器如何去解析當前xml,是對當前xml一個聲明,文檔聲明必須在xml的第一行出現,而且只能出現一次。一個不包含文檔聲明的xml稱為格式不良好的xml,雖然很多的解析器都可以解析,但這是不符合規範的,有風險的,所以不建議這樣做。
2.1.1<?xml version="1.0" ?>注意:所有的問號空格都必須是英文半形,version代表當前xml所遵循的規範,到目前位置都是1.0規範
2.1.2<?xml version="1.0" encoding="gb2312" ?>encoding屬性指定當前xml所使用的編碼集,解析器將用該編碼集去解碼xml。xml檔案如果儲存使用的編碼和encoding所指定的編碼不同就會導致亂碼問題,一定要注意。
2.1.3<?xml version="1.0" standalone="no" ?>standalone屬性聲明當前文檔是否是一個獨立的文檔,預設值為yes,如果該文檔要依存於其他文檔存在,則應該將此屬性設定為no。很多的解析引擎並不會真的參考這個屬性,但是標準就是標準,我們要按標準學習
2.2元素
一個標籤就是一個xml元素。
2.2.1標籤可以分文開始標籤和結束標籤,在開始標籤和結束標籤之間的文本稱為標籤體,如果一個標籤既不包含標籤體也不包含其他元素,可以將開始標籤和結束標籤進行合并,這樣的標籤就叫做自閉標籤。
例子:<a>我是標籤體</a> <a/>
2.2.2標籤可以嵌套子標籤,注意所有的嵌套都必須是合理嵌套。
2.2.3格式良好的xml必須包含且只能包含一個根標籤。
2.2.4xml元素的命名規範:
區分大小寫,例如,<P>和<p>是兩個不同的標記。
不能以數字或"_" (底線)開頭。
不能以xml(或XML、或Xml 等)開頭。
不能包含空格。
名稱中間不能包含冒號(:)。
2.3屬性
2.3.1一個xml元素可以包含多個屬性,一個屬性分為屬性名稱和屬性值,其中屬性值應該用雙引號或單引號給引起來。
2.3.2其實一個元素的屬性可以轉化為該元素的子標籤,在表示的內容上是同效的。
例子<china captital="beijing"/>
--->
<china>
<capital>
beijing
</capital>
</china>
2.3.3屬性也要遵循和元素相同的命名規範。
2.4注釋
<!--注釋內容-->
2.4.1注視不能出現在文檔聲明之前。
2.4.2注視不能再嵌套注釋
2.5CDATA區: 被CDATA區包含的內容將不會被解析器解析,而會當作文本來處理。
<![CDATA[
轉義的內容
]]>
2.6逸出字元
逸出字元用來轉義xml中特殊字元。
& --》 &
< --》<
> --》>
" --》"
' --》'
注意:CDATA區用來轉義一段內容,逸出字元只能用來轉義單個字元。
CDATA轉義是通過通知處理器不要去解析其中的內容來實現的,本質傳輸的還是那個特殊字元。逸出字元是將特殊字元用其他字元進行了替代,解析在看到轉以後的字元後會用特殊字元去展現,其實他背後傳輸的是轉義後的字元。
2.7處理指示
用來通知解析器以何種方式去解析xml
<?xml-stylesheet type="text/css" href="1.css" ?>
其實文檔聲明也是一種特殊的處理指示
多學一點:其實xml最初出現的目的就是替代html做網頁用的,結果這個傢伙太複雜了,對於做前台的開發的美工小mm們太過複雜,所以一直沒推行開,反倒是做為設定檔和傳輸資料的時候用的多一點。
3.xml的約束技術
xml約束技術就是可以提供一個文檔用來約束一個xml文檔的寫法。
市面上最常見的兩種xml約束技術是DTD SChema,這兩個技術都是標準,都由w3c組織負責發布。
3.1DTD
3.1.1如何在xml中引入DTD
(1)外部引入:dtd約束寫在外部檔案中,然後在xml中進行引入
<1>本地硬碟中的dtd檔案的引入
<!DOCTYPE 根項目的名稱 SYSTEM "dtd檔案路徑">
例如:<!DOCTYPE 書架 SYSTEM “book.dtd”>
<2>引入公用位置上的dtd
<!DOCTYPE 根項目的名稱 PUBLIC "DTD名稱" "DTD所在的URL">
例如:<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
(2)內部引入:dtd約束直接卸載xml檔案中
例子:
<!DOCTYPE 書架 [
<!ELEMENT 書架 (書+)>
<!ELEMENT 書 (書名,作者,售價)>
<!ELEMENT 書名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售價 (#PCDATA)>
]>
3.1.2如何約束xml元素
<!ELEMENT 元素名稱 元素約束>
元素約束:
(1)元素內容:元素內容必須用小括弧引起來
<!ELEMENT 書架 (.....)>
“,”: 如果括弧內的內容用逗號進行分割的話,表明其中的內容必須按順序出現。
“|”: 如果括弧內的內容用豎線進行分割的話,表明其中的內容只能出現其中之一。
#PCDATA:表明該元素中只能寫標籤體
+: 一次或多次 (書+)
?: 0次或一次 (書?)
*: 0次或多次 (書*)
利用括弧還可以進行組操作,形成更複雜的元素約束
例子: <!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>
(2)存放類型
EMPTY:表明當前元素不能再包含其他元素了
ANY:表明當前元素可以包含任意元素
3.1.3如何約束xml屬性
<!ATTLIST 元素名
屬性名稱1 屬性類型 屬性約束
屬性名稱2 屬性類型 屬性約束
……
>
(1)屬性約束
#REQUIRED 表明該屬性是一個必須存在的屬性
#IMPLIED 表明該屬性是一個可選的屬性
#FIXED "固定值" 表明該屬性必須取給定的固定值,如果強行設定成其他值dtd校正不通過,如果不給值解析器會預設將加上該屬性,並設定為給定的值
"預設值" 如果該該屬性沒有指定,則取預設值,如果指定成其他則用指定的值
(2)屬性類型
CDATA:表示屬性值為普通文本字串。
ENUMERATED 枚舉,屬性的值只能取給定的值中的一個
例子: 類型 (科技|文學|教育) #REQUIRED
ID:表明此屬性是一個標誌性的屬性,在整個xml文檔中該屬性的值不能重複出現。注意:ID的值不能以數字開頭,不能出現空白字元
例子:書號 ID #REQUIRED
3.1.4ENTITY(實體)
實體:就是對一段內容的引用
實體分為引用實體和參數實體
(1)引用實體:這段引用是被用在xml檔案中的
<!ENTITY 實體名稱 "實體內容">
引用的方式: &實體名稱;
例子:<!ENTITY 網址 "www.itheima.cn">
<書 類型="科技" 書號="a111" 網址="&網址;">
(2)參數實體 用在DTD中的實體
<!ENTITY % 實體名稱 "實體內容" >
引用參數實體:%實體名稱;