日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

XML簡(jiǎn)明教程

 todaytomo 2007-03-01
XML簡(jiǎn)明教程
一、XML的背景和應(yīng)用前景

 

   (一)起源

    XML(eXtended Markup Language)是從SGML(Standard Generalized Markup Language)進(jìn)化來的,最初SGML是為了解決文

檔及其格式問題的一種標(biāo)記語言,所以非常的復(fù)雜和難以使用,那時(shí)計(jì)算機(jī)的應(yīng)用水平還處在很低的階段,并且那時(shí)人們只需要傳遞

和顯示一些簡(jiǎn)單的數(shù)據(jù)。因此,89年Tim Berners-lee依據(jù)SGML開發(fā)出一種超文本格式,就叫HTML(HyperText Markup Language),

非常的簡(jiǎn)單。當(dāng)計(jì)算機(jī)的應(yīng)用水平也大幅度的提高的時(shí)候,人們已經(jīng)對(duì)太簡(jiǎn)單的HTML開始不滿意,因此又開始對(duì)其進(jìn)行修改、升級(jí),

就這樣HTML從1.0一直升到4.0的版本,擴(kuò)展了許多的命令,實(shí)際上也是為了讓HTML解決更多的問題,但是因?yàn)镠TML本身的缺陷,為了

解決更多的問題,是不是會(huì)把簡(jiǎn)單的HTML變成一個(gè)非常復(fù)雜的,難以理解的語言,就連現(xiàn)在看一個(gè)HTML的源文件,都會(huì)頭大好幾圈,

再加上HTML是把數(shù)據(jù)和顯示格式一起存放的,如果我們只想使用數(shù)據(jù)而不需要格式,可以想象,分離這些數(shù)據(jù)和格式是多么的困難。

而隨著Internet的發(fā)展, 98年1月W3C公布了XML1.0版本,立即成為計(jì)算機(jī)史上一個(gè)重要的里程碑。

    XML包括XML元數(shù)據(jù)文件、Schema文件、XSLT顯示文件、XLL鏈接、Xpath等一系列相關(guān)部分,但是對(duì)于不是計(jì)算機(jī)方面的專業(yè)

人士來講,最好只看它的元數(shù)據(jù)文件,而把別的問題交給開發(fā)和制作人員,這樣就可以讓非專業(yè)人士脫離看懂那些頭疼的術(shù)語的痛苦

。在此就先說說XML的特點(diǎn):

   1. 電子數(shù)據(jù)交換(EDI)

   2. 靈活的開發(fā)

    因?yàn)閄ML是數(shù)據(jù)和格式分離設(shè)計(jì)的,所以XML元數(shù)據(jù)文件就是純數(shù)據(jù)的文件,這樣就可以使用同一個(gè)數(shù)據(jù)源,顯示多種樣式了

。而使用HTML的話,每顯示一種式樣,就必須重新把數(shù)據(jù)和格式混到一起,這是一件很痛苦的事情。

    XML采用的TAG是自己定義的,這樣我們的數(shù)據(jù)文件的可讀性就能大大提高,也不再局限于HTML文件那些標(biāo)準(zhǔn)的TAG了。而且因

為XML支持Unicode,所以我們就可以使用中文標(biāo)記(TAG),是不是感覺很自由呢?看看這樣一個(gè)存放職員數(shù)據(jù)的XML數(shù)據(jù)文件:

    <職員>

     <姓名>于青</姓名>

     <性別>女</性別>

     <年齡>23</年齡>

     <學(xué)歷></學(xué)歷>

    <教育經(jīng)歷>

     <畢業(yè)學(xué)校>北京大學(xué)</畢業(yè)學(xué)校>

     <入學(xué)時(shí)間>1996-09-01</入學(xué)時(shí)間>

     <畢業(yè)時(shí)間>2001-07-01</畢業(yè)時(shí)間>

     <專業(yè)>中文</專業(yè)>

    </教育經(jīng)歷>

    </職員>

   看到這個(gè)文件感覺是不是很棒?這樣的文件不需要使用很復(fù)雜和專業(yè)的工具就可以增加、修改和編輯(使用微軟的記事本就可以

做到這些),而且大部分人都可以使用,可以讓一個(gè)非計(jì)算機(jī)的專業(yè)人士,在10分鐘內(nèi)學(xué)會(huì),這就是一個(gè)XML元數(shù)據(jù)文件的樣子。當(dāng)然

XML文件也不象HTML那樣可以寫的不完整,XML必須寫的中規(guī)中矩(well formed),否則XML的解析器就會(huì)報(bào)錯(cuò)。

   3. 面向?qū)ο蟮奶匦?/p>

    XML的文件是以樹狀方式存儲(chǔ),同時(shí)也有屬性,這非常符合面向?qū)ο蠓矫娴木幊?,而且也體現(xiàn)了以對(duì)象方式存儲(chǔ),ORACLE數(shù)據(jù)

庫(kù)就使用了這種面向?qū)ο蟮奶匦裕荗RACLE數(shù)據(jù)庫(kù)的根本是關(guān)系型的數(shù)據(jù)庫(kù),因此速度和穩(wěn)定性都有一定的問題,而且特別的復(fù)雜

,所以大家基本上是很少使用它的這一特性,深怕跳到坑里去!

   4. 缺陷

    世界上永遠(yuǎn)也不會(huì)出現(xiàn)完美的語言的,XML也是一樣,它也有很多的缺陷,雖然它是樹狀存儲(chǔ)的,搜索的效率極高,但是問題

不是在搜索,而是在于目前它的插入和修改,!

  

  #1 二、XML基礎(chǔ)

   (一)XML術(shù)語

    在學(xué)習(xí)XML之前,我想先給大家介紹一些XML使用的術(shù)語。平常我們學(xué)習(xí)新的語言時(shí),總會(huì)遇到許多難以理解的術(shù)語,在這里

就先介紹一些主要的給大家。

   元素(Elements):代表XML文檔中的每一個(gè)組件,包含字符、元素或者兩者皆有,允許有空元素(empty element)。

   屬性(Attributes):放在元素后面的數(shù)據(jù),代表這個(gè)元素的另一種特性和特征。

   統(tǒng)一編碼(Unicode):一種字符集,包括了全世界各種語言中有用的字符。

   實(shí)體:“文本片”,實(shí)體也像一個(gè)縮寫,一個(gè)實(shí)體可以是一個(gè)字符也可以是一個(gè)文檔的數(shù)據(jù),是XML文本的基本單位。

   標(biāo)記(Markup):像標(biāo)記(TAG)、實(shí)體引用(Entity reference)和聲明這樣的構(gòu)件。

   樣式表(XSL):描述XML的元數(shù)據(jù)文件格式的語言(因?yàn)镃SS對(duì)于XML來講不夠用)。

   序言(Prolog):關(guān)于文檔實(shí)例表現(xiàn)形式的信息。

   文檔實(shí)例(Document instance):以元素的層次結(jié)構(gòu)組織的實(shí)際文檔數(shù)據(jù)。

   (二)XML語法簡(jiǎn)介

    1.看一個(gè)簡(jiǎn)單的例子

    這是一個(gè)關(guān)于庫(kù)存物品清單的簡(jiǎn)單例子,大家可以從中發(fā)現(xiàn)XML的許多特性,并且可以體會(huì)到XML的元數(shù)據(jù)文件是非常清晰易

讀的:

  <!-XML文件示例-->

  <?xml version="1.0" encoding="GB2312" ?>

  <庫(kù)存清單>

   <!--這里就是注釋-->

   <庫(kù)存物品>

   <名稱>毛巾</名稱>

   <規(guī)格 單位="cm">25*50</規(guī)格>

   <生產(chǎn)廠家>中國(guó)棉紡廠</生產(chǎn)廠家>

   <生產(chǎn)日期>20010-09-01</生產(chǎn)日期>

   <數(shù)量 單位="條">400</數(shù)量>

   <進(jìn)貨價(jià) 單位="元">2.5</進(jìn)貨價(jià)>

   <零售價(jià) 單位="元">6.5</零售價(jià)>

   </庫(kù)存物品>

   <庫(kù)存物品>

   <名稱>碗</名稱>

   <規(guī)格 單位="cm">5*15</規(guī)格>

   <生產(chǎn)廠家>中國(guó)搪瓷廠</生產(chǎn)廠家>

   <生產(chǎn)日期>20010-09-11</生產(chǎn)日期>

   <數(shù)量 單位="個(gè)">200</數(shù)量>

   <進(jìn)貨價(jià) 單位="元">1.5</進(jìn)貨價(jià)>

   <零售價(jià) 單位="元">4.5</零售價(jià)>

   </庫(kù)存物品>

   <庫(kù)存物品>

   <名稱>筷子</名稱>

   <規(guī)格 單位="個(gè)">1*10</規(guī)格>

   <生產(chǎn)廠家>中國(guó)搪瓷廠</生產(chǎn)廠家>

   <生產(chǎn)日期>20010-09-11</生產(chǎn)日期>

   <數(shù)量 單位="把">200</數(shù)量>

   <進(jìn)貨價(jià) 單位="元">1.5</進(jìn)貨價(jià)>

   <零售價(jià) 單位="元">3.5</零售價(jià)>

   </庫(kù)存物品>

  </庫(kù)存清單>

  

    看過了XML語言的基本格式,下面將詳細(xì)講解XML元數(shù)據(jù)文件的各個(gè)組成部分,實(shí)際就上面這些而言是非常簡(jiǎn)單的,當(dāng)然,我

們要想更清楚的了解和學(xué)習(xí)XML,就必須清楚地知道這些定義的意義。

    2.聲明(Declaration)

    XML數(shù)據(jù)文件的定義不象HTML那樣自由,它是非常嚴(yán)格的,缺少一個(gè)就會(huì)出錯(cuò)!因?yàn)槊總€(gè)XML的解析器第一步要做的事情就是

檢查XML文件是否合格,就是“well-formed”,所以大家看到第一句是這樣些的:

  <?xml version="1.0" encoding="GB2312" ?>

   注意的是:不能漏掉此句,否則解析器不予解析的!當(dāng)然里面的encoding可以不用寫,缺省是Unicode,在此對(duì)XML使用的字符編

碼作一下說明,大家都應(yīng)該知道中文和英文的區(qū)別吧,呵呵,有人說了,這也太簡(jiǎn)單了,實(shí)際上平時(shí)有區(qū)別就罷了,結(jié)果鬧到計(jì)算機(jī)

上真是比較麻煩,大家用過古董DOS的就知道使用漢字在計(jì)算機(jī)上是一件多么困難的事情,別人26個(gè)字母就可以搞定,漢字卻要好幾萬

個(gè)?,F(xiàn)在的計(jì)算機(jī)的發(fā)展雖然神速,可國(guó)際化的問題卻一直存在,況且不屬英語語系的國(guó)家也都有此類問題,因此美國(guó)的各大電腦廠

商組成了一個(gè)Unicode促進(jìn)會(huì),結(jié)合ISO的字庫(kù)標(biāo)準(zhǔn),推出了Unicode,這個(gè)編碼可以滿足絕大多數(shù)語系的需要!

    3.元素(Elements)和屬性(Attributes)

    <元素名 屬性名=”屬性值”>

   <子元素>元素的數(shù)據(jù)</子元素>

    </元素名>

    大家看上面的這個(gè)例子,就能很形象的理解什么是元素什么是屬性,但是需要注意的是元素的大小寫是不一樣的,也就是說<

t></t>和<T></T>不是同一個(gè)元素。還有就是元素里的數(shù)據(jù),只要是合法的就會(huì)完全忠實(shí)的成為數(shù)據(jù),就如:

    <元素名>這是一個(gè)</元素名>

    <!-這是另一個(gè)-->

    <元素名>這是一個(gè) </元素名>

    <!-這又是另一個(gè)-->

    <元素名>這是一個(gè)

    </元素名>

    大家注意到?jīng)]有,第一、二只差一個(gè)空格,第三個(gè)則是多了一個(gè)回車符,但是這三個(gè)數(shù)據(jù)卻是不同的數(shù)據(jù),因此大伙在寫這

些數(shù)據(jù)的時(shí)候可一定要小心!

    如果大家對(duì)于面向?qū)ο笫煜さ脑挘欢ㄇ宄愐彩怯袑傩缘?,而XML自然也是包括屬性的,XML的元素是擁有屬性的,而且可

以有許多屬性,并且屬性值必須使用單引號(hào)或雙引號(hào)包含起來。

    4.注釋(Comments)

    如果大家編寫過程序,就一定知道,看別人的程序是一件非常痛苦的事情。如果別人的程序是沒有注釋的話,那簡(jiǎn)直就成了

一種慘無人道的折磨,呵呵,所以,在文檔中嵌入關(guān)于文檔和標(biāo)記的信息就是很有幫助的。這樣不但可以幫助別人也可以幫助自己。

   在XML的注釋里是這樣的:

  <!-啊,這就是幫助-->

   在這個(gè)注釋中間,可以放入除了“--”符號(hào)以外的所有字符,這稍稍有些不習(xí)慣,我們往往會(huì)使用這個(gè)符號(hào)來分離不同組成部分

的文檔,在XML的文件里則需要改一改了。

   5.預(yù)定義實(shí)體

    當(dāng)我們創(chuàng)建XML時(shí)候,有些符號(hào)例如“<”等和XML相重的標(biāo)記,譬如下面的:

    <文章>

   <段落>

   <html>

   <head>

   <title></title>

    </head>

   <body>

   <h1>我們那嘎都是活雷鋒</h1>

   <b>老張開車去東北……撞了</b>

   </body>

   </html>

   </段落>

    </文章>

   這樣是肯定行不通的,HTML和XML的定義相重,因?yàn)閄ML有5種預(yù)定義的實(shí)體,如下:

  &-------------------&

  <----------------------<

  >--------------------- >

  '------------------‘

  "------------------“

   這樣再寫這些文件就會(huì)象下面這樣:

  <文章>

   <段落>

   <html>

   <head>

   <title></title>

    </head>

   <body>

   <h1>我們那嘎都是活雷鋒</h1>

   <b>老張開車去東北……撞了</b>

   </body>

   </html>

   </段落>

  </文章>

   解析器會(huì)自動(dòng)把這些符號(hào)轉(zhuǎn)換成我們所要的文件,但是這樣實(shí)在是不好看懂,所以就又有了這個(gè)CDATA。

   6.CDATA

    從上面那一節(jié)的例子可以看出,使用預(yù)定義實(shí)體實(shí)在是難以看懂,但是有了這個(gè)CDATA之后,我們就可以讓分析器把那些特殊

數(shù)據(jù)當(dāng)作普通的數(shù)據(jù)來處理了!

   CDATA的定義如下:

  <![CDATA[ 內(nèi)容 ]]>

   將上節(jié)的例子拿來使用:

  <文章>

   <段落><![CDATA[

   <html>

   <head>

   <title></title>

    </head>

   <body>

   <h1>我們那嘎都是活雷鋒</h1>

   <b>老張開車去東北……撞了</b>

   </body>

   </html>

   ]]>

   </段落>

  </文章>

   這樣,解析器就可以解釋在這個(gè)符號(hào)中間的特殊字符了!

  #1 三、 CHEMA簡(jiǎn)介

   (一) Schema的引入

    通過上幾章介紹,相信大家對(duì)XML的基本語法已經(jīng)有了一個(gè)基本了解。 XML本身的語法很嚴(yán)謹(jǐn),也就是要求格式必須嚴(yán)整,包

括區(qū)分大小寫、整個(gè)文檔有且只有一個(gè)根、需要序言等等。在符合格式化良好的要求以后,就可以寫出規(guī)則整齊、可以通過內(nèi)置XML解

析器的瀏覽器解析XML文檔了。但XML本身也相當(dāng)?shù)撵`活,在符合基本語法的前提下,可以任意的編寫各種符合XML語法要求的文檔,這

也正是XML可擴(kuò)展的靈活性所在,但同時(shí)也產(chǎn)生了問題,比如要寫一個(gè)說明個(gè)人信息的XML文檔,可以這樣寫:

  <?xml version = “1.0” encoding=”GB2312” ?>

  <resume>

   <name>張立東</name>

   <sex>男</sex>

   <age>28</age>

   <birthday>1974-8-10</birthday>

   <address>北京市 海淀區(qū)</address>

  </resume>

   也可以這么寫:

  <?xml version = “1.0” encoding=”GB2312”?>

   <resume>

   <name>張立東</name>

   <sex>男</sex>

   <age>28</age>

   <birthday>

   <year>1974</year>

   <month>8</month>

   <day>10</day>

   </birthday>

   <address>北京市 海淀區(qū)</address>

  </resume>

   上面的兩個(gè)文檔對(duì)于人來說是很容易看懂的,但對(duì)于機(jī)器來說,它們就無法判斷

  <birthday>1974-8-10</birthday>和

   <birthday>

   <year>1974</year>

   <month>8</month>

   <day>10</day>

   </birthday>

  中的內(nèi)容是否相同了。這就需要一個(gè)相應(yīng)的“約束”,來規(guī)定一個(gè)固定的格式,這樣機(jī)器才可以正確的識(shí)別、比較和處理。正如

沒有規(guī)矩難以成方圓一樣, XML這么強(qiáng)大的語言自然也有這方面的考慮,這也就是DTD和Schema所要完成的功能。

   (二)DTD和Schema

    提到Schema就必須提到DTD。最早建立對(duì)SGML約束的是DTD,而XML又是SGML的超集,所以DTD由于歷史的原因也可以對(duì)XML本身

進(jìn)行約束,比如:每個(gè)節(jié)點(diǎn)可以含有的元素、元素的個(gè)數(shù)等等。但它也有很多的局限性,如不能定義元素值的范圍、學(xué)習(xí)起來有一定

的難度(要學(xué)習(xí)一種新的語法)等等。而最新的XML約束標(biāo)準(zhǔn)就可以輕松的滿足要求,這就是Schema。Schema與DTD不同,DTD本身有自

己的語法和要求,而Schema是完全符合XML語法的,只要對(duì)XML有初步的了解,就很容易對(duì)Schema上手。說了這么多,還是首先讓我們

通過一個(gè)例子來看看Schema是如何定義XML結(jié)構(gòu)的吧:

  [1]<?xml version="1.0" encoding="GB2312" ?>

  [2]<Schema xmlns="urn:schemas-microsoft-com:xml-data"

  [3] xmlns:dt="urn:schemas-microsoft-com:datatypes">

  [4] <ElementType name= "name"/>

  [5] <ElementType name= "sex"/>

  [6] <ElementType name= "age"/>

  [7]

  [8] <ElementType name= "address" />

  [9] <ElementType name= "month"/>

  [10] <ElementType name= "year"/>

  [11] <ElementType name= "day"/>

  [12] <ElementType name= "birthday" content="eltOnly">

  [13] <element type= "year" />

  [14] <element type= "month" />

  [15] <element type= "day" />

  [16] </ElementType>

  [17] <ElementType name= "resume" content="eltOnly">

  [18] <element type= "name" />

  [19] <element type="sex"/>

  [20] <element type="age"/>

  [21] <element type="birthday"/>

  [22] <element type="address"/>

  [23] </ElementType>

  [24]</Schema>

   下面對(duì)上面的例子做一個(gè)簡(jiǎn)單的講解:

   [1]行是一個(gè)XML序言,從這行也可以看出Schema是符合XML基本語法要求的。

   [2]-[3]是對(duì)Schema名域的一個(gè)定義。(由于我們這里是一個(gè)XML的入門文章,有關(guān)XML的名域問題可以參考相應(yīng)的XML文檔。)

   [4]定義一個(gè)名字為name的元素。

   [5]-[11]分別是對(duì)sex、age、address、month、year、day元素的定義。

   [12]-[16]是對(duì)birthday元素的一個(gè)定義,但birthday這個(gè)元素比較特殊,它其中又包含了year、month和day三個(gè)元素。 

其中content這個(gè)屬性是對(duì)元素中的數(shù)據(jù)進(jìn)行說明的。根據(jù)content中的數(shù)據(jù)eltOnly可以知道這個(gè)birthday元素的數(shù)據(jù)只能夠由元素構(gòu)

成。

   [17]-[23]是對(duì)resume這個(gè)元素的定義,resume這個(gè)元素是由name、sex、age、birthday、address這幾個(gè)元素構(gòu)成的。

   從上面的例子可以知道如何對(duì)一個(gè)簡(jiǎn)單的元素進(jìn)行定義,也可以知道一個(gè)由其他元素組成的元素如何定義。通過由元素組成的元

素的這種定義,就可以定義一個(gè)嵌套結(jié)構(gòu)的XML樹的基本結(jié)構(gòu)。

    到這里讀者對(duì)Schema已經(jīng)就有了一個(gè)基本的了解,也該是我們給Schame下一個(gè)簡(jiǎn)單定義的時(shí)候了:

    XML Schema是用來描述XML元素和屬性的。它包括屬性和元素類型說明,是可以為XML元素和屬性提供數(shù)據(jù)的類型校驗(yàn)?zāi)K。

  #1 四、xslt簡(jiǎn)介

    了解XML的基本語法、Schema的語法還遠(yuǎn)遠(yuǎn)不夠,XML是對(duì)數(shù)據(jù)和數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ),而Schema是對(duì)XML數(shù)據(jù)類型的定義。直到這

里還沒有對(duì)XML數(shù)據(jù)的顯示進(jìn)行處理。雖然可以通過內(nèi)置有XML解析器的瀏覽器直接對(duì)XML數(shù)據(jù)進(jìn)行查看,但畢竟看到的只是以樹狀結(jié)構(gòu)

顯示的XML數(shù)據(jù)。

    如果要把XML數(shù)據(jù)以漂亮的形式顯示出來就需要XSLT幫忙了。XSLT可以把XML處理成HTML形式輸出、WAP形式輸出,甚至也可以

是Word文檔的格式。其中最常用到的還是HTML的格式,下面講解中用到的所有例子都以HTML的轉(zhuǎn)換格式為例子。那就不說廢話了,還

是先看一個(gè)XSLT的例子吧!

   這個(gè)XSLT用到的一個(gè)XML文檔,文檔如下:

  <?xml version = "1.0" encoding="GB2312"?>

  <?xml:stylesheet type="text/xsl" href="s_xlt.xslt"?>

   <resumes>

   <resume>

   <name>張立東</name>

   <sex>男</sex>

   <age>28</age>

   <birthday>

   <year>1974</year>

   <month>8</month>

   <day>10</day>

   </birthday>

   <address>北京市 海淀區(qū)</address>

    </resume>

   <resume>

   <name>張三</name>

   <sex>男</sex>

   <age>50</age>

   <birthday>

   <year>1951</year>

   <month>6</month>

    <day>9</day>

   </birthday>

   <address>山西省</address>

   </resume>

   <resume>

   <name>李四</name>

   <sex>男</sex>

    <age>29</age>

   <birthday>

   <year>1973</year>

    <month>7</month>

    <day>12</day>

   </birthday>

    <address>山東省</address>

   </resume>

  </resumes>

   注:在上面的XML文檔中多了下面的一句:

  <?xml:stylesheet type="text/xsl" href="s_xlt.xslt"?>

    這一句就是對(duì)XSLT的引用,其中href中的內(nèi)容是對(duì)具體XSLT文檔位置的指定,有關(guān)s_xlt.xslt中的內(nèi)容就是下面要介紹的XSL

T例子的內(nèi)容。有關(guān)如何對(duì)XML,XLST、Schema的使用和測(cè)試,可以參考“一個(gè)應(yīng)用了xml、schema和xlst的例子”部分。

   對(duì)這個(gè)XML文檔進(jìn)行轉(zhuǎn)換處理的XSLT文檔如下:

  [1]<?xml version="1.0" encoding="GB2312"?>

  [2]<xsl:stylesheet version="1.0" xmlns:xsl="http://www./TR/WD-xsl">

  [3] <xsl:template match="/">

  [4] <HTML>

  [5] <HEAD>

  [6] <TITLE>個(gè)人簡(jiǎn)歷</TITLE>

  [7] </HEAD>

  [8] <BODY>

  [9] <xsl:for-each select="/resumes/resume">

  [10] <P>

  [11] <TABLE border="1" >

  [12] <CAPTION style="font-size: 150%; font-weight: bold">

  [13] 個(gè)人簡(jiǎn)歷

  [14] </CAPTION>

  [15] <TR>

  [16] <TH>姓名</TH><TD><xsl:value-of select="name"/></TD>

  [17] <TH>性別</TH><TD><xsl:value-of select="sex"/></TD>

  [18] <TH>生日</TH><TD><xsl:value-of select="birthday/year"/>年

  <xsl:value-of select="birthday/month"/>月<xsl:value-of select="birthday/day"/>日</TD>

  [19] </TR>

  [20] <TR>

  [21] <TH>地址</TH><TD colspan="5"><xsl:value-of select="address"/></TD>

  [22] </TR>

  [23] </TABLE>

  [24] </xsl:for-each>

  [25] </BODY>

  [26] </HTML>

  [27] </xsl:template>

  [28]</xsl:stylesheet>

   [1]XML的序言,從第一條語句可以看出XSLT也是符合XML語法的。

   [2]XSLT的名域。Xsl:stylesheet是XSLT的根元素,xsl是XSLT的名域標(biāo)識(shí)。所以都要在XSLT的語句前面加上xsl:來表明是XSLT

的語句。

   [3] <xsl:template match="/"> 是XSLT語言的匹配模式,主要是和引用它的XML文檔的根進(jìn)行匹配。其中/是代表XML文檔根的含

義。 例如:個(gè)人簡(jiǎn)介中的name可以用/resumes/resume/name 

的方式進(jìn)行引用。(由于這里只是對(duì)XSLT入門的一個(gè)初步介紹,對(duì)有關(guān)XML路徑想詳細(xì)了解的讀者可以參考XML文檔的XPATH部分。)

   [4]-[8]可以直接輸出,這部分是符合HTML語法的信息結(jié)構(gòu),HTML文檔的開始部分和head的定義。

   [9] <xsl:for-each select="/resumes/resume">是XSLT語言的選擇模式,是循環(huán)的對(duì)所有的/resumes/resume元素和這個(gè)元素所

包含的子元素進(jìn)行處理。

   [10]-[15] 可以直接輸出,符合HTML的語法結(jié)構(gòu)。

   [16] <TH>姓名</TH><TD><xsl:value-of select="name"/></TD> 

在這一行中有HTML的語句和也有XSLT的語句。其中<xsl:value-of select="name"/>也是屬于選擇模式的語句,可以直接把select選中

的元素內(nèi)容提取處理,處理以后的結(jié)果應(yīng)該是:<TH>姓名</TH><TD>張立東</TD>。

   [18]-[23]分別是對(duì)其他部分信息的顯示處理,其中也包含了部分的HTML語句。

   [24] <xsl:for-each> 語句的結(jié)束部分。

   [25]-[26]HTML語句。

   [27] <xsl:template> 語句的結(jié)束部分。也就是對(duì)整個(gè)XML文檔處理的結(jié)束。因?yàn)槊總€(gè)XML文檔只有一個(gè)根而這條語句是對(duì)根的部

分處理,所以是對(duì)整個(gè)XML文檔處理的結(jié)束。

   [28] XSLT文檔的結(jié)束。

    經(jīng)上面對(duì)這個(gè)簡(jiǎn)單例子的介紹,大家對(duì)XSLT對(duì)XML文檔的處理可能已經(jīng)有了一個(gè)基本的了解,可以簡(jiǎn)單的通過XSLT對(duì)XML進(jìn)行

處理啦。在結(jié)束這個(gè)部分之前對(duì)XSLT的語法做一個(gè)簡(jiǎn)單的小結(jié):

    可以大致的把模式語言分為三種:

    選擇模式

    <xsl:for-each>、<xsl:value-of>,和 <xsl:apply-templates> 

    測(cè)試模式

    <xsl:if> 和<xsl:when>

    匹配模式

    <xsl:template>

    選擇模式語句將數(shù)據(jù)從XML中提取出來,這是一種簡(jiǎn)單獲得數(shù)據(jù)的方法。這幾個(gè)標(biāo)記都有一個(gè)select屬性,選取XML中特定結(jié)

點(diǎn)名的數(shù)據(jù)。

    測(cè)試模式是對(duì)數(shù)據(jù)的一個(gè)判斷,然后根據(jù)判斷和匹配的結(jié)果進(jìn)行處理。有些和程序語言中的判斷語句和多判斷語句形似。

    匹配模式是一個(gè)可以單獨(dú)列出來的XSLT語句片斷,可以完成對(duì)一個(gè)特定部分的XSLT處理。有些和程序設(shè)計(jì)中的子程序相似。

  #1 五、一個(gè)應(yīng)用了xml、schema和xlst的例子

    通過上面的介紹,大家可能都已經(jīng)躍躍欲試,想自己做一個(gè)XML方面的小應(yīng)用了。那么在這里就滿足大家的要求,舉一個(gè)比較

全面的有實(shí)際意義的例子。

   假如有一個(gè)訂單要處理,訂單的基本內(nèi)容包括客戶的信息和產(chǎn)品信息兩個(gè)部分。

   客戶信息主要由客戶姓名、電話、傳真、地址組成。

    產(chǎn)品信息由編號(hào)、名稱、規(guī)格、價(jià)格、購(gòu)買數(shù)量組成。

    為了寫一個(gè)標(biāo)準(zhǔn)的XML文檔,首先要寫一個(gè)Schema來對(duì)XML文檔進(jìn)行約束:

下載該文件:
點(diǎn)擊下載該文件 

以下內(nèi)容為程序代碼:

<?xml version="1.0" encoding="GB2312"?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
 xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name= "姓名"/>
<ElementType name= "電話"/>
<ElementType name= "傳真"/>
<ElementType name= "地址"/>
<ElementType name= "編號(hào)"/>
<ElementType name= "名稱"/>
<ElementType name= "規(guī)格"/>
<ElementType name= "價(jià)格"/>
<ElementType name= "購(gòu)買數(shù)量"/>
<ElementType name= "客戶" content="eltOnly">
 <element type= "姓名"/>
 <element type= "電話"/>
 <element type= "傳真"/>
 <element type= "地址"/>
</ElementType>
<ElementType name= "產(chǎn)品" content="eltOnly">
 <element type= "名稱" />
 <element type="規(guī)格"/>
 <element type="價(jià)格"/>
 <element type="購(gòu)買數(shù)量"/>
</ElementType>
<ElementType name= "訂單" content="eltOnly">
 <element type= "客戶" />
 <element type="產(chǎn)品"/>
</ElementType>
<ElementType name= "全部訂單" content="eltOnly">
 <element type= "訂單" />
</ElementType>
</Schema>

   可以把上面的Schema文檔存儲(chǔ)為:Sch.xml,在下面的xml文檔中會(huì)用到這個(gè)Schema。

   下面是根據(jù)上面的約束寫的一段XML文檔:

下載該文件:
點(diǎn)擊下載該文件 

以下內(nèi)容為程序代碼:

<?xml version="1.0" encoding="GB2312"?>
<?xml:stylesheet type="text/xsl" href="S2_xls.xslt"?>
<全部訂單 xmlns="x-schema:Sch.xml">
<訂單>
<客戶>
 <名稱>張立東</名稱>
 <電話>010-12345678</電話>
 <傳真>010-87654321</傳真>
 <地址>北京市 海淀區(qū)</地址>
</客戶>
<產(chǎn)品>
 <名稱>扳手</名稱>
 <價(jià)格>10</價(jià)格>
 <規(guī)格>中</規(guī)格>
 <購(gòu)買數(shù)量>2</購(gòu)買數(shù)量>
</產(chǎn)品>
</訂單>
</全部訂單>

   下面是對(duì)XML進(jìn)行處理的S2_xls.xslt的內(nèi)容:

下載該文件:
點(diǎn)擊下載該文件 

以下內(nèi)容為程序代碼:

<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www./TR/WD-xsl">
<xsl:template match="/">
<HTML>
<HEAD>
 <TITLE>全部訂單</TITLE>
</HEAD>
<BODY>
 <h1>訂單內(nèi)容</h1>
 <xsl:for-each select="全部訂單/訂單">
 <TABLE border="1" >
  <TR>
   <TH>客戶名稱:</TH><TD><xsl:value-of select="客戶/名稱"/></TD>
   <TH>電話</TH><TD><xsl:value-of select="客戶/電話"/></TD>
   <TH>傳真</TH><TD><xsl:value-of select="客戶/傳真"/> </TD>
  </TR>
  <TR>
   <TH>地址</TH><TD colspan="5"><xsl:value-of select="客戶/地址"/></TD>
  </TR>
 </TABLE>
 <TABLE border="1" >
  <TR>
   <TH>產(chǎn)品名稱:</TH><TD><xsl:value-of select="產(chǎn)品/名稱"/></TD>
   <TH>價(jià)格</TH><TD><xsl:value-of select="產(chǎn)品/價(jià)格"/></TD>
   <TH>規(guī)格</TH><TD><xsl:value-of select="產(chǎn)品/規(guī)格"/> </TD>
  </TR>
  <TR>
   <TH>購(gòu)買數(shù)量</TH><TD colspan="5"><xsl:value-of select="產(chǎn)品/購(gòu)買數(shù)量"/></TD>
  </TR>
 </TABLE>
 </xsl:for-each>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>

    把上面的Schema和XSLT按照例子中的名字存儲(chǔ)到磁盤,然后把XML的內(nèi)容存儲(chǔ)成為文件,放到相同的子目錄下,然后用IE 5.0

進(jìn)行解析處理,就會(huì)看到符合Schema要求、經(jīng)過XSLT處理的文檔了.

  #1 六、后記

    以上只是簡(jiǎn)單介紹了XML的前端應(yīng)用部分,如果各位對(duì)XML的后臺(tái)開發(fā)還感興趣的話,就需要了解XML更加復(fù)雜的部分,也需要

知道XML的解析器是如何解析XML的。限于篇幅,只能給大家一個(gè)簡(jiǎn)單的介紹。

    XML文件的解析器目前分為兩種:

    一個(gè)是DOM(Document Object Model),一個(gè)是SAX。這兩個(gè)解析器都是可以解析XML的,但是在解析XML的方式上有很大的不

同,DOM是一次性的把XML文件讀入到內(nèi)存里解析,處理速度很快,而SAX則是一部分一部分的解析,所以資源占用較少,大伙了解了這

兩種特性后,就可以有選擇的使用解析器了。目前Microsoft和Java都支持這兩種解析器,因此大家可以放心的使用。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多