文章目錄
XML
可擴展標記語言 Extensible Markup Language
,類似HTML,但和HTML完全不一樣。目前遵循xml1.0規範。它是通用的數據交換格式。
允許用戶自定義標籤。一個標籤用於描述一段數據。
XML作用
- 用於客戶端
Client
和服務器Server
之間傳遞數據- 服務器就是裝着服務端程序的高配置電腦,配置較高,CPU一般用intel的志強處理器。
- 保存有關係的數據
- 用作軟件配置文件
- 對安卓層次來講,界面佈局文件還有
manifest
清單文件 - 提高系統的靈活性
XML語法
文檔聲明
文檔聲明出現的位置必須在xml文件第一行
<?xml version="1.0"?>
保存的時候xml
聲明的編碼要跟文件保存的編碼保持一直,如果不聲明編碼。默認使用的是utf-8
比如:
<?xml version="1.0"?>
<中國>
<河南>
<鄭州></鄭州>
<洛陽></洛陽>
</河南>
</中國>
中文編碼規則:gbk(大概2w漢字)
、gb2312(大概5k漢字)
、utf-8
手動聲明編碼規則:
<?xml version="1.0" encoding="gbk"?>
還有個standalone
說明文檔是否獨立,是否依賴其他文檔,如:
<?xml version="1.0" encoding="gbk" standalone="yes"?>
元素
元素指文件中出現的標籤,一個標籤分爲起始和結束標籤(不能省略),標籤是必須閉合的
一個標籤允許嵌套標籤,但是要注意層次順序,先開始後閉合,後開始先閉合。
一個XML文檔必須有且僅有一個根標籤
,其他標籤都是其後代標籤
<tag></tag>
注意:XML文檔並不會忽略\r\n \t
等等
命名規範:
- 區分大小寫
- 不能以數字或下劃線開頭
- 不能用xml保留字
- 不能包含空格
- 名稱中間不能包含冒號
:
屬性
- 屬性要
寫在開始標籤
中 - 屬性名稱的命名規範與元素命名規範相同
- 屬性一定要用引號(單或雙都行)引起來
- 屬性可以用子標籤的形式來表示
下面這段代碼用了兩種方式:
<?xml version="1.0"?>
<Persons>
<person name='wzq'>
<firstName>zq</firstName>
<lastName>w</lastName>
</person>
</Persons>
註釋
語法格式爲:
<!-- 我是註釋 -->
注意:
- 註釋不能放在第一行,第一行必須是
文檔聲明
- 註釋不能嵌套
- eclipse快捷鍵
ctrl+shift+/
CDATA區
CDATA裏面的內容不會被解析器解析
<![CDATA[]]>
他的作用就是:比如我們的XML文檔裏面要寫一些xml不允許的語法比如大於號>小於號<
等特殊字符,這時候就用CDATA進行聲明。
比如:
<?xml version="1.0"?>
<persons>
<person>
<![CDATA[<firstName> <w><w><w> </firstName>]]>
<lastName>wzq</lastName>
</person>
</persons>
特殊字符
對於一些特殊字符,若要在主題元素中顯示,必須轉義
特殊字符 | 轉義替代符號 |
---|---|
& | & |
< | < |
> | > |
" | " |
’ | ' |
XML約束
爲什麼要使用約束?
XML都是用戶自定義的標籤,若出現小小的錯誤,軟件程序將不能正確的獲取文件中的內容而報錯。
-
格式良好的XML:遵頊XML語法的XML
-
有效的XML:遵循約束文檔的XML
格式良好的不一定有效,有效的一定格式良好
XML技術中,可以編寫一個文檔來約束一個XML的書寫規範,這個文檔稱爲約束文檔
總之:約束文檔定義了XML中允許出現的元素名稱,屬性及元素出現的順序。
常用的約束技術:
- XML DTD
- XML Schema
DTD(Document Type Definition)
文檔類型定義。編碼必須使用UTF-8
作用:約束XML書寫規範
注意:DTD可以寫在單獨的文件中,擴展名是dtd
,編碼必須是utf-8
引入外部DTD文檔
第一種方式:當引用的DTD
文檔在本地時,可以這樣寫:
<!DOCTYPE 根元素 SYSTEM "book.dtd">
比如:
<!DOCTYPE 書架 SYSTEM "book.dtd">
第二種方式:當引用的DTD文檔在公共網絡上,這樣寫:
<!DOCTYPE 根元素 PUBLIC "DTD名稱" "DTD文檔URL">
比如:
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems,lnc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
在文檔內部編寫
DTD約束文檔可以在XML文檔種直接定義,(編碼沒有要求)
DTD語法——定義元素
在DTD文檔種使用ELEMENT
關鍵字來聲明一個XML元素
語法:
<!ELEMENT 元素名稱 使用規則>
使用規則:
(#PCDATA)
:指示元素內容只能時普通的文本EMPTY
:用於指示元素的主體爲空ANY
:用於指示元素的主題內容爲任意類型(子元素)
:指示元素種包含的子元素
定義子元素及描述他們的關係:
- 如果子元素用逗號分開,數媒必須按照聲明順序去寫XML文檔
- 如果子元素用
|
,說明任選其一 - 用
+ * ?
來表示元素出現的此輸- 如果子元素後面沒有
+ * ?
說明必須出現一次 +
表示至少出現一次*
表示可有可無?
表示0或1次
- 如果子元素後面沒有
DTD語法——定義屬性
用ATTLIST
關鍵字來爲一個元素聲明屬性,語法:
<!ATTLIST 元素名稱 屬性名1 屬性值類型 設置說明……>
屬性值類型:
CDATA
:表示屬性的取值爲普通的文本字符串(a|b|c)
:說明只能從中任選其一ID
:表示屬性的取值不能重複
設置說明:
#REQUIRED
:表示該屬性必須出現#IMPLIED
:表示該屬性可有可無#FIXED
:表示屬性的取值爲一個固定值,語法#FIXED "固定值"
DTD語法——定義引用實體
在DTD中定義,在XML中使用
語法:
<!ENTITY 實體名稱 "實體內容">
引用:
&實體名稱
DTD約束實例
<?xml version="1.0"?>
<!DOCTYPE 書架(書+)[
<!ELEMENT 書架 (書+)>
<!ELEMENT 書 (書名,作者,售價)>
<!ELEMENT 書名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售價 (#PCDATA)>
<!ATTLIST 書
ISBN ID #REQUIRED
COMMENT CDATA #IMPLIED
STYLE (a|b) #IMPLIED
出版社 CDATA "demo"
>
<!ENTITY JY "金庸">
]>
<書架>
<書 ISBN='a' COMMENT='ddd' STYLE='a'>
<書名>射鵰英雄傳</書名>
<作者>&JY</作者>
<售價>0$</售價>
</書>
<書 ISBN='b' STYLE='b'>
<書名>神鵰俠侶</書名>
<作者>金庸</作者>
<售價>0$</售價>
</書>
</書架>
Schema約束
他的出現克服了DTD的侷限性,Schema文件自身就是一個XML文件,但它的擴展名通常爲.xsd
。
XML Schema VS DTD:
Schema
符合XML語法結構- DOM、SAX等XML API很容易解析出XML Schema文檔中的內容
Schema
對namespace支持的很好Schema
比DTD支持更多的數據類型,並支持用戶自定義新的數據類型Schema
定義約束的能力非常搶答,可以對XML實例文檔做出細緻的語義限制Schema
不能像DTD一樣定義實體,比DTD更復雜,但Schema
正在逐步替代DTD,在安卓中,清單文件和佈局文件用到了Schema技術
。
Schema約束文檔示例
這是Schema約束文檔
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.lesileqin.com/book"
xmlns:tns="http://www.lesileqin.com/book"
elementFormDefault="qualified">
<xs:element name="書架">
<xs:complexType>
<xs:sequence maxOccurs='unbounded'>
<xs:element name="書">
<xs:complexType>
<xs:sequence>
<xs:element name='書名' type='xs:string'/>
<xs:element name='作者' type='xs:string'/>
<xs:element name='售價' type='xs:string'/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
這是對應的xml文件,下面這個xml文件應該完全符合上述schema的標準
<?xml version="1.0" encoding="UTF-8"?>
<tns:書架 xmlns:tns="http://www.lesileqin.com/book" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.lesileqin.com/book book.xsd ">
<tns:書>
<tns:書名>tns:書名</tns:書名>
<tns:作者>tns:作者</tns:作者>
<tns:售價>tns:售價</tns:售價>
</tns:書>
</tns:書架>
Schema教程
請參考這個鏈接:點我