1. 程式人生 > >#XML學習筆記

#XML學習筆記

XML 被設計用來傳輸和儲存資料。

HTML 被設計用來顯示資料。

XML僅僅是純文字,可以發明自己的標籤!

一個 XML 文件例項:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
<span style="color:#000000">第一行是 XML 宣告。它定義 XML 的版本 (1.0) 和所使用的編碼 (ISO-8859-1 = Latin-1/西歐字符集)。</span>

所有 XML 元素都須有關閉標籤

註釋:您也許已經注意到 XML 宣告沒有關閉標籤。這不是錯誤。宣告不屬於XML本身的組成部分。它不是 XML 元素,也不需要關閉標籤。

XML 標籤對大小寫敏感、XML 必須正確地巢狀、XML 文件必須有根元素

在 XML 中,所有元素都必須彼此正確地巢狀.XML必須有根元素!

XML 的屬性值須加引號:例如

<note date="08/08/2008">
<to>George</to>
<from>John</from>
</note

實體引用:

為了避免這個錯誤,請用實體引用來代替特例字元,如"<" 

在 XML 中,有 5 個預定義的實體引用:

&lt;

<

小於

&gt;

>

大於

&amp;

&

和號

&apos;

'

單引號

&quot;

"

引號

註釋:在 XML 中,只有字元 "<" 和 "&" 確實是非法的。大於號是合法的,但是用實體引用來代替它是一個好習慣。

XML 中的註釋(在 XML 中編寫註釋的語法與 HTML 的語法很相似):

<!-- This is a comment --> 

在 XML 中,文件中的空格不會被刪節!!!

XML 命名規則

XML 元素必須遵循以下命名規則:

  • 名稱可以含字母、數字以及其他的字元

  • 名稱不能以數字或者標點符號開始

  • 名稱不能以字元 “xml”(或者 XML、Xml)開始

  • 名稱不能包含空格

可使用任何名稱,沒有保留的字詞。

最佳命名習慣:

使名稱具有描述性。使用下劃線的名稱也很不錯。

名稱應當比較簡短,比如:<book_title>,而不是:<the_title_of_the_book>。

避免 "-" 字元。如果您按照這樣的方式進行命名:"first-name",一些軟體會認為你需要提取第一個單詞。

避免 "." 字元。如果您按照這樣的方式進行命名:"first.name",一些軟體會認為 "name" 是物件 "first" 的屬性。

避免 ":" 字元。冒號會被轉換為名稱空間來使用。

XML 文件經常有一個對應的資料庫,其中的欄位會對應 XML 文件中的元素。有一個實用的經驗,即使用資料庫的名稱規則來命名 XML 文件中的元素。

非英語的字母比如 éòá 也是合法的 XML 元素名,不過需要留意當軟體開發商不支援這些字元時可能出現的問題。

    XML 元素是可擴充套件的:(之後XML文件的作者可以向這個文件新增額外的資訊

XML 元素可以在開始標籤中包含屬性,類似 HTML,屬性 (Attribute) 提供關於元素的額外(附加)資訊。

(XML 屬性必須加引號:單引號和雙引號均可)

<person sex="man"></person>

註釋:如果屬性值本身包含雙引號,那麼有必要使用單引號包圍它,就像這個例子:

<gangster name='George "Shotgun" Ziegler'>

或者可以使用實體引用:

<gangster name="George &quot;Shotgun&quot; Ziegler">

在 HTML 中,屬性用起來很便利,但是在 XML 中,您應該儘量避免使用屬性。如果資訊感覺起來很像資料,那麼請使用子元素吧!!!

避免 XML 屬性?

因使用屬性而引起的一些問題:

  • 屬性無法包含多重的值(元素可以)

  • 屬性無法描述樹結構(元素可以)

  • 屬性不易擴充套件(為未來的變化)

  • 屬性難以閱讀和維護

請儘量使用元素來描述資料。而僅僅使用屬性來提供與資料無關的資訊。

針對元資料的 XML 屬性

有時候會向元素分配 ID 引用。這些 ID 索引可用於標識 XML 元素,它起作用的方式與 HTML 中 ID 屬性是一樣的。這個例子向我們演示了這種情況:

<messages>
  <note 
id="501"
>
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
  </note>
  <note 
id="502"
>
    <to>John</to>
    <from>George</from>
    <heading>Re: Reminder</heading>
    <body>I will not</body>
  </note> 
</messages>

上面的 ID 僅僅是一個識別符號,用於標識不同的便籤。它並不是便籤資料的組成部分。

在此我們極力向您傳遞的理念是:元資料(有關資料的資料)應當儲存為屬性,而資料本身應當儲存為元素。


元素可包含文字、其他元素或者是空的。空的 HTML 元素的例子是 "hr"、"br" 以及 "img"。

由於元素本身為空,它被一個 " /" 關閉。如:

<br />、<hr />、<img />

所有 XML 文件中的文字均會被解析器解析。

只有 CDATA 區段(CDATA section)中的文字會被解析器忽略。

關於 CDATA 部分的註釋:

CDATA 部分不能包含字串 "]]>"。也不允許巢狀的 CDATA 部分。

標記 CDATA 部分結尾的 "]]>" 不能包含空格或折行。

CDATA 部分由 "<![CDATA[" 開始,由 "]]>" 結束:

PCDATA 是會被解析器解析的文字。這些文字將被解析器檢查實體以及標記。

文字中的標籤會被當作標記來處理,而實體會被展開。

不過,被解析的字元資料不應當包含任何 &、< 或者 > 字元;需要使用 &amp;、&lt; 以及 &gt; 實體來分別替換它們。

CDATA 是不會被解析器解析的文字。在這些文字中的標籤不會被當作標記來對待,其中的實體也不會被展開。

XML DOM

在下面的例子中,我們使用 DOM 引用從 <to> 元素中獲取文字:

xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue

  • xmlDoc -由解析器建立的 XML 文件

  • getElementsByTagName("to")[0] - 第一個 <to> 元素

  • childNodes[0] - <to> 元素的第一個子元素(文字節點)

  • nodeValue - 節點的值(文字本身)

HTML DOM

在下面的例子中,我們使用 DOM 引用來改變 id="to" 的 HTML 元素的文字:

document.getElementById("to").innerHTML=

  • document - HTML 文件

  • getElementById("to") - 其中的 id="to" 的 HTML 元素

  • innerHTML - HTML 元素的內部文字

XML 文件可以包含非 ASCII 字元,比如法語。

Windows 記事本預設會將檔案儲存為單位元組的 ANSI (ASCII)!!!

為了避免錯誤,需要規定 XML 編碼,或者將 XML 文件存為 Unicode。

通常,我們在資料庫中儲存資料。不過,如果希望資料的可移植性更強,我們可以把資料儲存 XML 檔案中。