XML教程~一文完結

前言:

     XML指可擴展標記語言(eXtensible Markup Language),被設計用來傳輸和存儲數據。我們在jQuery中講解了現在流行了JSON,但是爲了更好的學習之後的框架,我們還是來看看XML教程。

     首先,我們依舊從一個簡單的例子開始:

<?xml version="1.0" encoding="UTF-8"?>
<note>
    <to>Tove</to>
    <from>Jani</from>
    <heding>Reminder</heding>
    <body>Don't forget me this weekend!</boy>
</note>

1、什麼是XML?

1)XML指可擴展標記語言

2)XML是一種很像HTML的標記語言

3)XML的設計宗旨是傳輸數據,而不是顯示數據。

4)XML標籤沒有被預定義,你需要自行定義標籤

5)XML被設計爲具有自我描述性

6)XML是W3C的推薦標準。

     那我們很快就可以看出,XML的焦點是數據的內容HTML的焦點是數據的外觀

 

2、XML用途

1)XML把數據從HTML分離

     如果您需要在HTML文檔中顯示動態數據,每當數據改變時,需要花費大量時間來編輯HTML,通過XML,數據可以獨立存儲在XML文件中(當然啦,我們肯定是可以通過JavaScript來改變的)。所以通過使用幾行JavaScript代碼,就可以讀取到一個外部XML文件,並更新網頁的數據內容。

 

3、XML樹結構

     我們上面的例子中,第一行是XML聲明,定義版本和使用的編碼,之後就是根元素和子元素。我們很清楚HTML中DOM的樹結構,那麼我們看看XML文檔的樹結構吧。

 

 

4、語法

1)文檔必須有根元素

2)XML聲明文件時可選的,如果需要要放到文檔的第一行

3)每一個元素都必須有一個關閉標籤

4)標籤對大小寫敏感。

5)屬性值必須加引號

6)當然,這裏也有實體引用

< < less than
> > greater than
& & ampersand
' ' apostrophe
" " quotation mark

7)註釋,和HTML一樣<!-- comment -->

8)在HML中,空格會被保留

9)XML以LF存儲換行

在Windows應用程序中,換行通常用一對字符來存儲:回車符(CR)和換行符(LF)

在Unix和Mac OSX中,使用LF來存儲新行。

在舊的Mac系統中,使用CR來存儲新行。

XML以LF存儲換行(我們用'\n'就好~)。

 

5、XML元素

XML元素指的是從(且包括)開始標籤直到(且包括)結束標籤的部分。

一個元素可以包括:

  • 其他元素

  • 文本

  • 屬性

  • 或混合以上所有...

1)命名規則

雖然大多和編程語言命名規則一致,但有所差別:

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

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

  • 名稱不能以字母 xml(或者 XML、Xml 等等)開始

  • 名稱不能包含空格

好的命名就是具有描述性,用下換線之類的,避免使用奇怪的字符。

 

6、XML屬性

雖然是自定義標籤,但是也有屬性:

第一個實例中使用了 date 屬性:

<note date="10/01/2008">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

第二個實例中使用了date元素:

<note>
<date>10/01/2008</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

第三個實例中使用了擴展的date元素:

<note>
<date>
<day>10</day>
<month>01</month>
<year>2008</year>
</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

1)我們要注意屬性不能包含多個值(元素可以);屬性不能包含樹結構;屬性不容易擴展。

2)針對元數據的XML屬性:

這裏分配ID引用,僅僅是爲了標識XML元素:

<messages>
<note id="501">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note id="502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Reminder</heading>
<body>I will not</body>
</note>
</messages>

 

7、驗證

擁有正確語法的XML被稱爲“形式良好”的XML,通過DTD驗證的XML是合法的XML。

1)驗證XML文檔

DOCTYPE聲明是對外部DTD文件的引用

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

這個文件的內容如下:

<!DOCTYPE note
[
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>

2)也可以使用XML Schema代替DTD。

<xs:element name="note">
​
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
​
</xs:element>

3)驗證器

可以用一個通過的XML驗證器


驗證部分擴展-簡潔DTD教程

     DTD(文檔類型定義)的作用是定義XML文檔的合法合併模塊,可以成行的聲明與XML文檔中,也可以作爲一個外部引用。

1、簡介

1)內部DOCTYPE聲明

加入DTD被包含在你的XML源文件中,它正確通過下面的語法包裝在一個DOCTYPE聲明中:

<!DOCTYPE root-element [element-declarations]>

例如:

<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>
  • !DOCTYPE note (第二行)定義此文檔是 note 類型的文檔。

  • !ELEMENT note (第三行)定義 note 元素有四個元素:"to、from、heading,、body"

  • !ELEMENT to (第四行)定義 to 元素爲 "#PCDATA" 類型

  • !ELEMENT from (第五行)定義 from 元素爲 "#PCDATA" 類型

  • !ELEMENT heading (第六行)定義 heading 元素爲 "#PCDATA" 類型

  • !ELEMENT body (第七行)定義 body 元素爲 "#PCDATA" 類型

 

2)外部文檔聲明

<!DOCTYPE root-element SYSTEM "filename">

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

DTD的note.dtd文件:

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

     通過DTD,你的每一個XML文件均可攜帶一個有相關自身格式的描述,可以一致的使用某個DTD來交換數據,也可以驗證自身的數據。

 

2、DTD-XML構建模塊

1、XML文檔構造模塊:

  • 元素

  • 屬性

  • 實體

  • PCDATA

  • CDATA

這裏我們解釋PCDATA:

     PCDATA的意思是被解析的字符數據(parsed character data)。可以把字符數據想象爲XML元素的開始標籤與結束標籤之間的文本,PCDATA是被解析器解析的文本,這些文本將被解析器檢查實體以及標記。

CDATA:

     CDATA的意思是字符數據(character data),CDATA是不會被解析器解析的文本。

 

3、元素

1)聲明一個元素:

     在一個DTD中,元素通過元素聲明來進行聲明:

<!ELEMENT element-name category>
或
<!ELEMENT element-name (element-content)>

 

4、屬性

     在DTD中,屬性通過ATTLIST聲明來進行聲明

<!ATTLIST element-name attribute-name attribute-type attribute-value>
​
DTD 實例:
​
<!ATTLIST payment type CDATA "check">
​
XML 實例:
​
<payment type="check" />
CDATA 值爲字符數據 (character data)
(en1|en2|..) 此值是枚舉列表中的一個值
ID 值爲唯一的 id
IDREF 值爲另外一個元素的 id
IDREFS 值爲其他 id 的列表
NMTOKEN 值爲合法的 XML 名稱
NMTOKENS 值爲合法的 XML 名稱的列表
ENTITY 值是一個實體
ENTITIES 值是一個實體列表
NOTATION 此值是符號的名稱
xml: 值是一個預定義的 XML 值


 

7、使用XSLT顯示XML

     爲了更加直觀的看到我們的XML,我們可以使用CSS,但是不推薦使用這個,所以我們使用XSLT。它是首選的XML樣式表語言,比CSS更加完善,是在瀏覽器顯示XML文件之前,先把它轉換爲HTML。

 

8、JavaScript-XMLHttpRequest對象

     XMLHttpRequest對象用於在後臺與服務器交換數據,是開發者的夢想,因爲能夠:

  • 在不重新加載頁面的情況下更新網頁

  • 在頁面已加載後從服務器請求數據

  • 在頁面已加載後從服務器接收數據

  • 在後臺向服務器發送數據

創建一個XMLHttpRequest對象語法:

xmlhttp=new XMLHttpRequest();

 

9、XML Parser

     我們在學習JSON的時候,有parse()方法解析,這裏我們看看XML的解析。

1)解析XML文檔:

if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","books.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;

2)解析XML字符串

txt="<bookstore><book>";
txt=txt+"<title>Everyday Italian</title>";
txt=txt+"<author>Giada De Laurentiis</author>";
txt=txt+"<year>2005</year>";
txt=txt+"</book></bookstore>";
​
if (window.DOMParser)
{
parser=new DOMParser();
xmlDoc=parser.parseFromString(txt,"text/xml");
}
else // Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXML(txt);
}

我們把XML轉換爲了XML DOM對象。

 

3)XML DOM

這裏將XML文檔解析到XMLDOM對象中,然後通過JavaScript提取信息:

<html>
<body>
<h1>W3Schools Internal Note</h1>
<div>
<b>To:</b> <span id="to"></span><br />
<b>From:</b> <span id="from"></span><br />
<b>Message:</b> <span id="message"></span>
</div>
​
<script>
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","note.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
​
document.getElementById("to").innerHTML=
xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
document.getElementById("from").innerHTML=
xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
document.getElementById("message").innerHTML=
xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;
</script>
​
</body>
</html>

 

10、服務器上的XML

1)從數據庫生成XML

<%
response.ContentType = "text/xml"
set conn=Server.CreateObject("ADODB.Connection")
conn.provider="Microsoft.Jet.OLEDB.4.0;"
conn.open server.mappath("/db/database.mdb")
​
sql="select fname,lname from tblGuestBook"
set rs=Conn.Execute(sql)
​
response.write("<?xml version='1.0' encoding='ISO-8859-1'?>")
response.write("<guestbook>")
while (not rs.EOF)
response.write("<guest>")
response.write("<fname>" & rs("fname") & "</fname>")
response.write("<lname>" & rs("lname") & "</lname>")
response.write("</guest>")
rs.MoveNext()
wend
​
rs.close()
conn.close()
response.write("</guestbook>")
%>

 

後記:

     去了解XML可以很好的幫助我們之後去理解javaweb中xml文件結構。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章