小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

XML簡明教程

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

 

   (一)起源

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

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

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

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

就這樣HTML從1.0一直升到4.0的版本,擴展了許多的命令,實際上也是為了讓HTML解決更多的問題,但是因為HTML本身的缺陷,為了

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

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

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

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

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

。在此就先說說XML的特點:

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

   2. 靈活的開發(fā)

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

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

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

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

    <職員>

     <姓名>于青</姓名>

     <性別>女</性別>

     <年齡>23</年齡>

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

    <教育經(jīng)歷>

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

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

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

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

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

    </職員>

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

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

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

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

    XML的文件是以樹狀方式存儲,同時也有屬性,這非常符合面向?qū)ο蠓矫娴木幊蹋乙搀w現(xiàn)了以對象方式存儲,ORACLE數(shù)據(jù)

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

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

   4. 缺陷

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

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

  

  #1 二、XML基礎(chǔ)

   (一)XML術(shù)語

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

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

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

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

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

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

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

   樣式表(XSL):描述XML的元數(shù)據(jù)文件格式的語言(因為CSS對于XML來講不夠用)。

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

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

   (二)XML語法簡介

    1.看一個簡單的例子

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

讀的:

  <!-XML文件示例-->

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

  <庫存清單>

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

   <庫存物品>

   <名稱>毛巾</名稱>

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

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

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

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

   <進貨價 單位="元">2.5</進貨價>

   <零售價 單位="元">6.5</零售價>

   </庫存物品>

   <庫存物品>

   <名稱>碗</名稱>

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

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

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

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

   <進貨價 單位="元">1.5</進貨價>

   <零售價 單位="元">4.5</零售價>

   </庫存物品>

   <庫存物品>

   <名稱>筷子</名稱>

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

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

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

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

   <進貨價 單位="元">1.5</進貨價>

   <零售價 單位="元">3.5</零售價>

   </庫存物品>

  </庫存清單>

  

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

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

    2.聲明(Declaration)

    XML數(shù)據(jù)文件的定義不象HTML那樣自由,它是非常嚴(yán)格的,缺少一個就會出錯!因為每個XML的解析器第一步要做的事情就是

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

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

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

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

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

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

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

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

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

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

    </元素名>

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

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

    <元素名>這是一個</元素名>

    <!-這是另一個-->

    <元素名>這是一個 </元素名>

    <!-這又是另一個-->

    <元素名>這是一個

    </元素名>

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

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

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

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

    4.注釋(Comments)

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

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

   在XML的注釋里是這樣的:

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

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

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

   5.預(yù)定義實體

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

    <文章>

   <段落>

   <html>

   <head>

   <title></title>

    </head>

   <body>

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

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

   </body>

   </html>

   </段落>

    </文章>

   這樣是肯定行不通的,HTML和XML的定義相重,因為XML有5種預(yù)定義的實體,如下:

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

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

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

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

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

   這樣再寫這些文件就會象下面這樣:

  <文章>

   <段落>

   <html>

   <head>

   <title></title>

    </head>

   <body>

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

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

   </body>

   </html>

   </段落>

  </文章>

   解析器會自動把這些符號轉(zhuǎn)換成我們所要的文件,但是這樣實在是不好看懂,所以就又有了這個CDATA。

   6.CDATA

    從上面那一節(jié)的例子可以看出,使用預(yù)定義實體實在是難以看懂,但是有了這個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>

   ]]>

   </段落>

  </文章>

   這樣,解析器就可以解釋在這個符號中間的特殊字符了!

  #1 三、 CHEMA簡介

   (一) Schema的引入

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

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

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

也正是XML可擴展的靈活性所在,但同時也產(chǎn)生了問題,比如要寫一個說明個人信息的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>

   上面的兩個文檔對于人來說是很容易看懂的,但對于機器來說,它們就無法判斷

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

   <birthday>

   <year>1974</year>

   <month>8</month>

   <day>10</day>

   </birthday>

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

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

   (二)DTD和Schema

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

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

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

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

通過一個例子來看看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>

   下面對上面的例子做一個簡單的講解:

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

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

   [4]定義一個名字為name的元素。

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

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

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

成。

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

   從上面的例子可以知道如何對一個簡單的元素進行定義,也可以知道一個由其他元素組成的元素如何定義。通過由元素組成的元

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

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

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

  #1 四、xslt簡介

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

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

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

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

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

是先看一個XSLT的例子吧!

   這個XSLT用到的一個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"?>

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

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

   對這個XML文檔進行轉(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>個人簡歷</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] 個人簡歷

  [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)識。所以都要在XSLT的語句前面加上xsl:來表明是XSLT

的語句。

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

義。 例如:個人簡介中的name可以用/resumes/resume/name 

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

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

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

包含的子元素進行處理。

   [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]分別是對其他部分信息的顯示處理,其中也包含了部分的HTML語句。

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

   [25]-[26]HTML語句。

   [27] <xsl:template> 語句的結(jié)束部分。也就是對整個XML文檔處理的結(jié)束。因為每個XML文檔只有一個根而這條語句是對根的部

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

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

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

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

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

    選擇模式

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

    測試模式

    <xsl:if> 和<xsl:when>

    匹配模式

    <xsl:template>

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

點名的數(shù)據(jù)。

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

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

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

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

全面的有實際意義的例子。

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

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

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

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

下載該文件:
點擊下載該文件 

以下內(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= "編號"/>
<ElementType name= "名稱"/>
<ElementType name= "規(guī)格"/>
<ElementType name= "價格"/>
<ElementType name= "購買數(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="價格"/>
 <element type="購買數(shù)量"/>
</ElementType>
<ElementType name= "訂單" content="eltOnly">
 <element type= "客戶" />
 <element type="產(chǎn)品"/>
</ElementType>
<ElementType name= "全部訂單" content="eltOnly">
 <element type= "訂單" />
</ElementType>
</Schema>

   可以把上面的Schema文檔存儲為:Sch.xml,在下面的xml文檔中會用到這個Schema。

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

下載該文件:
點擊下載該文件 

以下內(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)品>
 <名稱>扳手</名稱>
 <價格>10</價格>
 <規(guī)格>中</規(guī)格>
 <購買數(shù)量>2</購買數(shù)量>
</產(chǎn)品>
</訂單>
</全部訂單>

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

下載該文件:
點擊下載該文件 

以下內(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>價格</TH><TD><xsl:value-of select="產(chǎn)品/價格"/></TD>
   <TH>規(guī)格</TH><TD><xsl:value-of select="產(chǎn)品/規(guī)格"/> </TD>
  </TR>
  <TR>
   <TH>購買數(shù)量</TH><TD colspan="5"><xsl:value-of select="產(chǎn)品/購買數(shù)量"/></TD>
  </TR>
 </TABLE>
 </xsl:for-each>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>

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

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

  #1 六、后記

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

知道XML的解析器是如何解析XML的。限于篇幅,只能給大家一個簡單的介紹。

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

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

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

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

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多