XML教程

          Posted on 2007-11-13 15:38 yukui 閱讀(139) 評(píng)論(0)  編輯  收藏 所屬分類: 技術(shù)

          處理XML元素

          XML是一種標(biāo)識(shí)語(yǔ)言。一個(gè)XML元素是由開始標(biāo)簽、結(jié)束標(biāo)簽以及標(biāo)簽之間的數(shù)據(jù)構(gòu)成的。開始和結(jié)束標(biāo)簽用來(lái)描述標(biāo)簽之間的數(shù)據(jù)。標(biāo)簽之間的數(shù)據(jù)被認(rèn)為是元素的值。例如,在下面一個(gè)XML元素的例子中,元素“director”的值是“Éd Wood”。

          <director>Ed Wood</director>

          元素名(“director”)允許你把“Ed Wood”這個(gè)值標(biāo)出來(lái),這樣你就能把這些數(shù)據(jù)同另外類似的數(shù)據(jù)區(qū)分開來(lái)。例如,有可能另一個(gè)元素的值也是“Ed Wood”。

          <actor>Ed Wood</actor>

          由于每個(gè)元素都有不同的標(biāo)簽名,所以你能很容易把上面兩個(gè)元素的值區(qū)別開來(lái)。如果沒有辦法把數(shù)據(jù)標(biāo)出來(lái),兩個(gè)有同樣值的元素會(huì)混淆起來(lái)。

          返回

          處理XML文檔

          一個(gè)基本的XML文檔就是一個(gè)XML元素,它可以嵌套XML元素。例如,下面的XML元素“books”就是一個(gè)有效的XML文檔

          <books>
                      <book isbn="0345374827">
                      <title>The Great Shark Hunt</title>
                      <author>Hunter S. Thompson</author>
                      </book>
                      </books>

          構(gòu)建一個(gè)基本的XML文檔需要記住關(guān)鍵的三點(diǎn):所有元素必須有結(jié)束標(biāo)簽;所有元素必須正確的嵌套(不允許交迭元素);所有特征值必須加引號(hào)。

          返回

          處理XML數(shù)據(jù)島

          什么是XML數(shù)據(jù)島?

          數(shù)據(jù)島是指存在于HTML頁(yè)面中的XML代碼。數(shù)據(jù)島允許你在HTML頁(yè)面中集成XML對(duì)XML編寫腳本,不需要通過(guò)腳本或<OBJECT>標(biāo)簽讀取XML。幾乎所有能夠存在于一個(gè)結(jié)構(gòu)完整的XML文檔中的東西都能存在于一個(gè)數(shù)據(jù)島中。包括處理指示、DOCTYPE聲明和內(nèi)部子集。(注意,編碼串不能放在數(shù)據(jù)島中。)

          數(shù)據(jù)島的XML可以是內(nèi)嵌的:

          <XML ID="XMLID">
                      <customer>
                      <name>Herbert Hanley</name>
                      <custID>81422</custID>
                      </customer>
                      </XML>

          或者在XML標(biāo)簽中通過(guò)SRC屬性引用:

          <XML ID="XMLID" SRC="customer.xml"></XML>

          處理指導(dǎo)

          簡(jiǎn)單處理XML。把XML放到一個(gè)XML元素中,并且給這個(gè)XML元素一個(gè)ID

          返回

          類似于文檔對(duì)象訪問(wèn)一個(gè)XML數(shù)據(jù)島

          什么是XML文檔對(duì)象?

          XML文檔對(duì)象是指一個(gè)擁有屬性和方法的對(duì)象,你可以利用這些屬性和方法訪問(wèn)和處理XML文檔。當(dāng)一個(gè)XML數(shù)據(jù)島被讀取和解析時(shí),就會(huì)創(chuàng)建一個(gè)XML文檔對(duì)象

          怎樣訪問(wèn)XML數(shù)據(jù)島?

          下面是一個(gè)帶有數(shù)據(jù)島的HTML頁(yè)面。數(shù)據(jù)島在<XML>元素中。

          <HTML>
                      <HEAD>
                      <TITLE>HTML with XML Data Island</TITLE>
                      </HEAD>
                      <BODY>
                      <P>Within this document is an XML data island.</P>
                      <XML ID="resortXML">
                      <resorts>
                      <resort>Calinda Cabo Baja</resort>
                      <resort>Na Balam Resort</resort>
                      </resorts>
                      </XML>
                      </BODY>
                      </HTML>

          你能通過(guò)ID屬性訪問(wèn)數(shù)據(jù)島,“resortXML”成為文檔對(duì)象的名稱。你能利用這個(gè)對(duì)象的方法和屬性訪問(wèn)它的根節(jié)點(diǎn)和孩子節(jié)點(diǎn)。在上面的例子中,根節(jié)點(diǎn)是<resorts>,孩子節(jié)點(diǎn)是<resort>。下面列出了一些屬性和方法,可用來(lái)訪問(wèn)XML文檔的節(jié)點(diǎn)。

          • XMLDocument:返回對(duì)XML文檔對(duì)象模式的引用

             

          • documentElement:返回XML文檔的根節(jié)點(diǎn)。

             

          • childNodes:返回節(jié)點(diǎn)的孩子節(jié)點(diǎn)目錄。

             

          • item:通過(guò)索引訪問(wèn)目錄中的個(gè)別節(jié)點(diǎn)。索引值是從0開始的,所以item(0)返回第一個(gè)節(jié)點(diǎn)。

             

          • text:返回節(jié)點(diǎn)的內(nèi)容。

             

          下面的代碼訪問(wèn)第二個(gè)孩子節(jié)點(diǎn)<resort>并返回它的內(nèi)容“Na Balam Resort”。

          resortXML.XMLDocument.documentElement.childNodes.item(1).text

          返回

          訪問(wèn)XML對(duì)象模式

          什么是XML對(duì)象模式?

          微軟IE5中的XML解析器揭示了XML對(duì)象模式,允許你訪問(wèn)和處理XML文檔中的節(jié)點(diǎn)。當(dāng)解析器讀取并且解析一個(gè)XML文檔時(shí),它將建立一棵節(jié)點(diǎn)樹,每個(gè)節(jié)點(diǎn)都能通過(guò)腳本來(lái)訪問(wèn)。

          例如,如果解析器讀取并且解析下面的XML文檔,它將創(chuàng)建一個(gè)能通過(guò)文檔ID(xmlDocument)被引用的文檔對(duì)象,一個(gè)表現(xiàn)根節(jié)點(diǎn)的對(duì)象和一個(gè)表現(xiàn)樹中其余節(jié)點(diǎn)的對(duì)象。

          怎樣訪問(wèn)樹中的節(jié)點(diǎn)?

          請(qǐng)?jiān)囍谙旅娴臄?shù)據(jù)島中找出訪問(wèn)每個(gè)節(jié)點(diǎn)所需要的代碼。

          <XML ID="xmlDocument">
                      <class>
                      <student studentID="13429">
                      <name>Jane Smith</name>
                      <GPA>3.8</GPA>
                      </student>
                      </class>
                      </XML>

          返回

          XML文檔中使用數(shù)據(jù)類型

          什么是XML文檔中的數(shù)據(jù)類型?

          微軟提供的XML Schema版本支持?jǐn)?shù)據(jù)類型。作為一項(xiàng)預(yù)先展示的技術(shù),它對(duì)于那些想要用schema和豐富的數(shù)據(jù)類型構(gòu)造原型和增長(zhǎng)經(jīng)驗(yàn)的開發(fā)者來(lái)說(shuō)是很有用的。微軟積極參與制定逐步形成的W3CXML Schema標(biāo)準(zhǔn)。開發(fā)者需要注意這個(gè)版本的XML Schema是要變化的。在微軟IE5當(dāng)中,元素值能被指定數(shù)據(jù)類型。數(shù)據(jù)類型能夠通過(guò)XML Schema或根據(jù)實(shí)際情況被指定。以前,XML元素值只有一種類型(字符串),所以開發(fā)者要處理XML文檔必須花時(shí)間轉(zhuǎn)換元素值。鍵入你的XML數(shù)據(jù),解析器會(huì)進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。另外,由于元素值有特定的數(shù)據(jù)類型,所以元素值的改變也要符合數(shù)據(jù)類型。這給你提供了一種確認(rèn)使用者輸入的方法。

          如何指定XML元素值的類型?

          通過(guò)XML Schema指定元素值的類型,你必須在XML Schema的開頭聲明數(shù)據(jù)類型的名域和schema的名域。

          <Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">

          dt前綴用來(lái)在schema中表示指定數(shù)據(jù)類型的類型屬性。

          <ElementType name="NUMBER" content="textOnly" dt:type="number"/>

          通過(guò)dt屬性指定元素類型,你必須在XML文檔的開頭聲明數(shù)據(jù)類型的名域。

          <NUMBERS xmlns:dt="urn:schemas-microsoft-com:datatypes">

          dt前綴用來(lái)給一個(gè)元素的例子指定數(shù)據(jù)類型。

          <NUMBERS xmlns:dt="urn:schemas-microsoft-com:datatypes">
                      <NUMBER dt:dt="number">44533</NUMBER>
                      </NUMBERS>

          返回

          訪問(wèn)經(jīng)過(guò)類型定義的XML

          什么是經(jīng)過(guò)類型定義的XML值?

          經(jīng)過(guò)類型定義的XML值是指在XML Schema中被指定數(shù)據(jù)類型的元素值。XML解析器使用schema來(lái)確認(rèn)文檔。

          微軟提供的XML Schema版本支持?jǐn)?shù)據(jù)類型。作為一項(xiàng)預(yù)先展示的技術(shù),它對(duì)于那些想要用schema和豐富的數(shù)據(jù)類型構(gòu)造原型和增長(zhǎng)經(jīng)驗(yàn)的開發(fā)者來(lái)說(shuō)是很有用的。微軟積極參與制定逐步形成的W3CXML schema標(biāo)準(zhǔn)。開發(fā)者需要注意這個(gè)版本的XML Schema是要變化的

          除了擁有字符串值以外,每個(gè)XML元素也可以有經(jīng)過(guò)類型定義的值。例如下面的XML元素:

          <date>1970-09-30</date>

          值可以是“1970-09-30”,也可以是經(jīng)過(guò)類型定義的“Web Sep 30 00:00:00 PDT 1970.

          如何訪問(wèn)經(jīng)過(guò)類型定義的XML值?

          可以通過(guò)XML對(duì)象模式訪問(wèn)經(jīng)過(guò)類型定義的數(shù)據(jù)。就好象你能根據(jù)元素節(jié)點(diǎn)的節(jié)點(diǎn)值性質(zhì)找到元素值一樣,你能根據(jù)元素本身的節(jié)點(diǎn)類型值找到經(jīng)過(guò)類型定義的元素值。

          例如,考慮一下下面的XML文檔:

          <?xml version="1.0"?>
                      <weather xmlns="x-schema:weatherSchema.xml">
                      <date>1970-09-30</date>
                      <degrees>67.5</degrees>
                      </weather>

          weatherSchema.xml”是下面這個(gè)文件:

          <Schema xmlns="urn:schemas-microsoft-com:xml-data"xmlns:dt="urn:schemas-microsoft-com:datatypes">
                      <ElementType name="date" content="textOnly" dt:type="date"/>
                      <ElementType name="degrees" content="textOnly" dt:type="float"/>
                      <ElementType name="weather" content="eltOnly"/>
                      <element type="date"/>
                      <element type="degrees"/>
                      </ElementType>
                      </Schema>

          如果你要處理“degrees”這個(gè)元素(xmlDocument.documentElement.childNodes.item(1)),你可以根據(jù)節(jié)點(diǎn)類型值來(lái)訪問(wèn)它的值(xmlDocument.documentElement.childNodes.item(1).nodeTypedValue

          返回

          XML Schema

          什么是XML Schema

          W3C XML Activity Page 聲明:“盡管XML1.0提供了一種機(jī)制,文檔類型定義(DTD)給標(biāo)記的使用加了限制,但是對(duì)XML文檔的自動(dòng)處理需要更嚴(yán)格更全面的工具。需要主要體現(xiàn)在對(duì)應(yīng)用軟件各部分的結(jié)合、文檔結(jié)構(gòu)、屬性和數(shù)據(jù)類型等等的約束。W3C XML Schema工作組正忙于定義XML文檔的結(jié)構(gòu)、內(nèi)容和語(yǔ)義。”

          微軟IE5支持XML Schema,這項(xiàng)預(yù)先展示的技術(shù)是建立在遞交給W3CXML-Data草案的基礎(chǔ)上的。XML Schema可被認(rèn)為是XML-Data草案的子集,它符合文檔內(nèi)容描述(DCD)提議的特點(diǎn)。

          IE5中的XML解析器能夠根據(jù)文檔類型定義(DTD)XML Schema解析XML文檔。XML Schema是用來(lái)聲明內(nèi)容模式的基于XML的語(yǔ)法。它有DTD所有的功能,并且還有其他的功能如數(shù)據(jù)類型定義。

          如何建立XML Schema

          請(qǐng)?jiān)谙旅娴?/span>XML文檔中找一找每個(gè)節(jié)點(diǎn)的schema聲明。

          <class xmlns="x-schema:classSchema.xml">
                      <student studentID="13429">
                      <name>Jane Smith</name>
                      <GPA>3.8</GPA>
                      </student>
                      </class>

          你會(huì)注意到在上面文檔中默認(rèn)的名域是“x-schema:classSchema.xml”。這告訴解析器根據(jù)URL(“classSchema.xml”)上的schema(x-schema)來(lái)解析整個(gè)文檔。

          下面是上面那個(gè)文檔的完整的schema。注意schema的根元素中的名域聲明。第一個(gè)(xmlns=”urn:schemas-microsoft-com:xml-data”)表明這個(gè)XML文檔是一個(gè)XML Schema。第二個(gè)(xmlns:dt=”urn:schemas-microsoft-com:datatypes”)允許schema處理者在“ElementType”和“AttributeType”聲明中的“type”屬性前加“dt”前綴來(lái)說(shuō)明元素的類型和內(nèi)容的特征

          <Schema  xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">
                      <AttributeType name='studentID' dt:type='string' required='yes'/>
                      <ElementType name='name' content='textOnly'>
                      <ElementType name='GPA' content='textOnly' dt:type='float'/>
                      <ElementType name='student' content='mixed'>
                      <attribute type='studentID'/>
                      <element type='name'/>
                      <element type='GPA'/>
                      </ElementType>
                      <ElementType name='class' content='eltOnly'>
                      <element type='student'/>
                      </ElementType>
                      </Schema>

          schema用“Schema”元素開頭,“Schema”元素包括schema名域的聲明,在本例中還包括數(shù)據(jù)類型名域的聲明。Schema的內(nèi)容以“AttributeType”和“ElementType”的聲明開頭

          <AttributeType name='studentID' dt:type='string' required='yes'/>
                      <ElementType name='name' content='textOnly'>
                      <ElementType name='GPA' content='textOnly' dt:type='float'/>

          這些聲明接下來(lái)的是剛聲明過(guò)元素的父親元素的“ElementType”聲明。

          <ElementType name='student' content='mixed'>
                      <attribute type='studentID'/>
                      <element type='name'/>
                      <element type='GPA'/>
                      </ElementType>

          這個(gè)過(guò)程繼續(xù)下去,直到所有元素都已經(jīng)聲明了。

          不同于DTDsXML Schema允許有一個(gè)開放的內(nèi)容模式,你可以進(jìn)行定義數(shù)據(jù)類型、使用默認(rèn)值等等操作而不必限定內(nèi)容

          在下面的schema中,“GPA”元素的類型被定義并有一個(gè)默認(rèn)值,但在“student”元素中沒有其他節(jié)點(diǎn)被聲明

          <Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">
                      <AttributeType name="scale" default="4.0"/>
                      <ElementType name="GPA" content="textOnly" dt:type="float">
                      <attribute type="scale"/>
                      </ElementType>
                      <AttributeType name="studentID"/>
                      <ElementType name="student" content="eltOnly" model="open" order="many">
                      <attribute type="studentID"/>
                      <element type="GPA"/>
                      </ElementType>
                      </Schema>

          上面的schema允許你只確認(rèn)你所關(guān)心的區(qū)域。這使你對(duì)文檔有更多的控制,并允許你使用schema提供的一些特性而不必嚴(yán)格確認(rèn)。

          一些說(shuō)明:

          • ElementType”和“AttributeType”聲明必須放在“attribute”和“element”內(nèi)容聲明之前。例如,在上面的schema中,“GPA”元素的“ElementType”聲明必須放在“student”元素的“ElementType”聲明之前。

             

          • order”屬性的默認(rèn)值是建立在“content”屬性的值上的。當(dāng)content值為“eltOnly”時(shí),order默認(rèn)值是“seq”。當(dāng)content值為“mixed”時(shí),order默認(rèn)值是“many”。

             

          posts - 131, comments - 12, trackbacks - 0, articles - 32

          Copyright © yukui

          主站蜘蛛池模板: 青冈县| 汉川市| 高清| 林口县| 工布江达县| 长丰县| 裕民县| 文成县| 衡阳市| 萨嘎县| 克山县| 泰宁县| 老河口市| 江阴市| 富川| 遂溪县| 婺源县| 山西省| 渝北区| 江阴市| 萨迦县| 北安市| 大邑县| 涞源县| 濮阳市| 汉中市| 铜陵市| 苗栗市| 婺源县| 莱阳市| 建瓯市| 永川市| 北流市| 麦盖提县| 武乡县| 沙湾县| 渝北区| 辰溪县| 南陵县| 昔阳县| 雅安市|