1. 程式人生 > >xml 筆記:(一)

xml 筆記:(一)

xml簡介:

eXtensible Markup Language 簡寫 xml(可擴充套件標記型語言)
xml語言是具有結構性的標記語言,  可以靈活的儲存一對多的資料關係。
xml用途:
	可以用於顯示資料
	儲存資料(主要功能)	

xml檔案組成部分

  • 文件宣告
    什麼是文件宣告?
    • 在編寫文件時,需要先使用文件宣告xml文件。且必須出現文件的第一行。是個硬性規定。
      <?xml version='1.0' encoding='UTF-8'?>

      <!--xml 表示標籤的名字 version 當前檔案版本號 encoding 當前編碼  standalone 標記此文件是否獨立 例如 standalone="yes" 或者no-->
      

- 元素
什麼是元素?

  • xml中的元素其實就是一個個的標籤
    標籤分為兩種:

  • 包含標籤體

    <person>
        <name>馮nuo</name>
        <age>18</age>
    </person>
    
  • 不包含標籤體

    <person
        name="馮nuo"
        age = "18"
    />
    

標籤書寫規範

  • 嚴格區分大小寫;

  • 只能以字母或下劃線開頭;abc _abc

  • 不能以xml(或XML、Xml等)開頭

  • 名稱字元之間不能有空格或製表符;

  • 名稱字元之間不能使用冒號 :
    元素屬性
    注意事項:

  • 一個元素可以有多個屬性,每個屬性都有它自己的名稱和取值。

  • 屬性值一定要用引號(單引號或雙引號)引起來。

  • 屬性名稱的命名規範與元素的命名規範相同

  • 元素中的屬性是不允許重複的

  • 在XML技術中,標籤屬性所代表的資訊也可以被改成用子元素的形式來描述

    <?xml version="1.0" encoding="UTF-8"?>
    <persons>
    <person name="馮nuo" age="18" />
    <person>
        <name>馮nuo</name>
        <age>18</age>
    </person>
    </persons>
    
  • 註釋
    格式:

    • (註釋不能巢狀定義)
  • CDATA區
    為什麼要使用CDATA區域?

    • 如果我們在標籤中寫入的內容, 想要帶有標籤的標記符號的話, 就需要對這段內容進行轉義
      寫法:<![CDATA[ 內容 ]]>
  • 特殊字元

  • PI指令(處理指令)
    可以在xml設定樣式

    <?xml-stylesheet type="text/css" href="css的路徑"?>

    注意:設定樣式,只能對英文標籤名稱起作用,對於中文的標籤名稱不起作用的。

xml的約束
為什麼需要約束

  • 打個比方,一個檔案中儲存的是個關於人的相關資訊,在沒有約束的情況下可定義非人類屬性特徵的資訊,在編譯的時候不會報錯,但不符合常理,xml的標籤是自定義的,需要技術來規定xml中只能出現的元素,這個時候需要約束。
  • xml約束技術:dtd約束 schema約束

DTD
什麼是DTD?

  • DTD(Document Type Definition),文件型別定義,用來約束XML文件。例如要求xml文件的根元素必須是,在元素下可以包含0~n個元素,每個元素必須有一個number屬性,而且還要有三個子元素,分別為、、,這三個子元素的內容必須為文字內容,而不能是子元素。

程式碼:

<!-- persons元素中可以包含1~n個student元素 -->
<!ELEMENT persons (student+)>
<!-- person元素中必須包含name、age、sex元素,而且順序也是固定的 -->
<!ELEMENT person (name,age,sex)>
<!-- name元素內容為文字,即字串 -->
<!ELEMENT name (#PCDATA)>
<!-- age元素內容為文字 -->
<!ELEMENT age (#PCDATA)>
<!-- sex元素內容為文字 -->
<!ELEMENT sex (#PCDATA)>

xml檔案中引入DTD檔案:

格式:  <!DOCTYPE persons SYSTEM "路徑名">   (以上文person為例)

	引入了寫好的DTD檔案後,格式就必須跟DTD檔案保持一致。

語法細節

在DTD文件中宣告xml元素使用ELEMENT關鍵字

語法: <!ELEMENT 元素名稱 使用規則>

使用規則:
	(#PCDATA):只元素的主體內容只能是普通的文字
   		  EMPTY:用於指示元素的主體為空
	   ANY:用於指示元素的主體內容為任意型別。
	(子元素):指示元素中包含的子元素	

定義子元素及描述他們的關係:

	1.如果子元素用逗號分開,說明必須按照宣告順序去編寫XML文件。
	2.如果子元素用"|"分開,說明任選其一。
	3.用+、*、?來表示元素出現的次數
		 如果元素後面沒有+*?:表示必須且只能出現一次
		 +:表示至少出現一次,一次或多次
		 *:表示可有可無,零次、一次或多次
		?:表示可以有也可以無,有的話只能有一次。零次或一次

在xml文件中指定內部DTD
還是以人類為例程式碼演示

<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<!DOCTYPE persons [
<!ELEMENT persons (person+)>
<!ELEMENT person (name, age, sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
]>
<persons>
	<person>
		<name>馮nuo</name>
		<age>18</age>
		<sex>nan</sex>
	</person>
</persons>

在XML文件中指定外部公共DTD

格式:

<!DOCTYPE 根元素 PUBLIC "DTD名稱" "DTD網址">

DTD屬性定義

在DTD文件中使用ATTLIST關鍵字來為一個元素宣告屬性
	屬性定義格式:
	<ATTLIST 元素名
		屬性名1 屬性值型別  設定說明
		屬性名2 屬性值型別  設定說明
			…………
	>

屬性型別:

  • CDATA : 屬性值為任意文字資料
  • Enumerated :屬性值必須是列舉列表中的一個
  • ID : 屬性值必須是唯一的,並且屬性值不能以數字開頭
    設定說明
    • #REQUIRED:表示該屬性必須出現
    • #IMPLIED: 表示該屬性可有可無
    • #FIXED:表示屬性的取值為一個固定元值。語法 #FIXRD"固定值"
      直接值:表示屬性的取值為該預設值