概述XML文件結構
- 每個XML文件都分為兩部分:序言(Prolog)和文件元素(或文件節點)
例子:寫一段XML然後簡單分析一下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE myfile [
<!ELEMENT myfile (title,author)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
]>
<myfile id="11">
<!--註釋資訊-->
<title>XML</title>
<author>hjk</author>
</myfile>
分析
-
首先前六行是XML文件的序言,包含了此文件的後設資料,就是文件的基本資料
- 第一行
<?xml version="1.0" encoding="UTF-8"?>
是XML文件的一個宣告,有效的XML文件的第一行必須是XML文件的宣告;這個格式是基本固定的前面的標籤必須寫成<?xml
,後面version=是版本號,目前只有兩個版本1.0和1.1,encoding是編碼格式,不管是version還是encoding等於的內容都必須用單引號或者雙引號包含。 - 第二行內部定義了XML文件的DTD,DTD就是自定義標籤之間的關係。
<!ELEMENT myfile (title,author)>
這個意思是myfile標籤包含兩個子標籤title,author。<!ELEMENT title (#PCDATA)>
表示title是一個PCDATA型別,PCDATA(可解析的字元資料)。
- 第一行
-
第七行到最後就是文件節點
<myfile>
是根元素,ids是屬性,下面是註釋,title和author
是子元素
-
上面沒有定義處理命令,補充一下:處理指令可以用於將資訊傳遞給應用程式。處理指令可以出現在文件任意位置的標記外部。可以出現在序言中,包括文件的型別定義(DTD),文字內容或者文件之後
處理指令的語法:
<?target instructions?>
- 意思
- target 標識指令指向哪個應用程式。
- instruction 字元,描述了應用程式要處理的資訊
一個常用的處理指令的例子是通知瀏覽器對XML進行轉換,如下所示:
<?xml-stylesheet type="text/xsl" href="appUsers.xslt" ? >
XML語法
XML文件規則
格式良好的XML文件,包含一個或多個元素,並且他們相互之間必須正確的巢狀。必須有且只有一個根元素,包含其他所有的元素。所有元素構成一個簡單的層次樹,所以元素與元素之間唯一的直接關係就是父子關係。
格式良好的XML文件
格式良好的XML文件不一定是有效的XML文件,有效的XML文件肯定是格式良好的XML文件
- 必須包含宣告語句
<?xml version="1.0" encoding="UTF-8"?>
- 區分大小寫
標籤和 是兩個標籤,不能進行匹配,,否者報錯.建議同意使用大小寫 - 所有XML文件必須有且只有一個根元素
- 屬性值必須使用引號
- 所有標籤必須有相應的結束標籤
- 所有空標籤必須被關閉
<title></title>
</title>
- 標籤必須正確巢狀
<title><name>...</name></title> 正確
<title><name>...</title></name> 錯誤
XML字元引用和實體引用
字元引用
有一些字元鍵盤上是沒有的或者是一些圖形字元。所以XML文件可以使用Unicode或者十六進位制數字將他們字元引用的形式加入
語句為:
©
©
程式碼:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<char>©</char>
<char>©</char>
</data>
效果:
實體引用
實體引用時在一個合法的XML名字前面加上一個&,後面加上一個分號
&name;
實體(這裡面最後面應該時英文分號; | 用途 |
---|---|
&; | 通常用來代替& |
<; | 通常代替< |
>; | 通常代替> |
&apos; | 通常代替' |
"; | 通常代替" |
自定義實體引用
必須在文件使用前,在DTD文件中進行定義。
自定義實體定義語法:
<!DOCTYPE filename[
<!ENTITF entity-name"entity-content"
]>
例子
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE
student[
<!ELEMENT student (name,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ENTITY me "hjk">
]>
<student>
<name>&me;</name>
<sex>男</sex>
</student>
效果:可以看到
名稱空間
XML名稱空間提供了一種避免命名衝突的方法。
命名衝突,就是兩個不同的XML文件使用同一個名字,來描述不同元素的情況。如果這兩個XML文件時獨立的執行的,那沒有影響,但是如果恰巧一起使用,就會出現命名衝突的情況。
名稱空間使用
名稱空間通過給標識名稱加一個網址(URL)以定位的方法來區別這些名稱相同的標識。名稱空間需要在XML文件開頭部分宣告,名稱空間宣告一般放置在元素的開始標記處。
語法格式
xmlns:prefix="URL"
prefix是名稱空間的字首,是可選的。
名稱空間兩種宣告方式
- 預設宣告
<?xml version="1.0" encoding="UTF-8" ?>
<student xmlns="http://www.edu.cn/xxx/xx">
<name>hjk</name>
<sex>男</sex>
</student>
我個人理解就是給student加一個唯一的標識,其實這個URL存在正確與否都不重要,只要是唯一的就行,用這個URL來區分這些標籤。
- 明確宣告
<?xml version="1.0" encoding="UTF-8" ?>
<h:student xmlns:h="http://www.edu.cn/xxx/xx">
<h:name>hjk</h:name>
<h:sex>男</h:sex>
</h:student>
明確宣告感覺就像是取一個別名,這個元素的每一個子元素和他本身都需要用這個別名的字首。
DTD兩種宣告方式
內部DTD
上面已經提到了,這裡簡單說一下
<!DOCTYPE myfile [
<!ELEMENT myfile (title,author)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
]>
外部DTD
外部DTD的好處就是:它可以方便搞笑的被多個XML文件共享
外部D他的定義和內部差不多,不在需要<!DOCTYPE>,直接寫內容就可以,但是要儲存成dtd檔案,即檔名為name.dtd,name是檔名
外部dtd檔案,檔名myfile.dtd
<!ELEMENT myfile(title,author)>
<!ELEMENT title(#PCDATA)>
<!ELEMENT author(#PCDATA)>
那麼如何引用呢。引用格式為
<!DOCTYPE type-of-doc SYSTEM/PUBLIC"dtdfile-name">
例項引用上面mufile.dtd檔案
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE myfile SYSTEM "myfile.dtd">
<myfile>
<title>XML</title>
<author>hjk</author>
</myfile>
解釋說明:
- !DOCTYPE 指要定義一個DOCTYOE
- type-of-doc 指文件型別名稱,由使用者自己定義,通常與使用這個DTD檔案XML文件根元素名稱一致
- SYSTEM/PUBLIC 二選一,SYSTEM是指私有的外部DTD檔案,就是自己或者合夥人寫的。PUBLIC指文件呼叫一個公用的DTD檔案,由一個權威的機構定製的,提供給特定行業或公眾的DTD。
- dtdfile-name;就是存放DTD檔案的地址和名稱,同目錄下只寫名稱就可以。
以上是目前所學習的理解!!