#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 個預定義的實體引用:
< |
< |
小於 |
> |
> |
大於 |
& |
& |
和號 |
' |
' |
單引號 |
" |
" |
引號 |
註釋:在 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 "Shotgun" 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 是會被解析器解析的文字。這些文字將被解析器檢查實體以及標記。
文字中的標籤會被當作標記來處理,而實體會被展開。
不過,被解析的字元資料不應當包含任何 &、< 或者 > 字元;需要使用 &、< 以及 > 實體來分別替換它們。
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 檔案中。