引用 JS?取XML

 

引用

小乔JS?取XML

 

查看文章

 

JS?取XML

2008-12-02 09:32

XML的背景

HTML?XML都是由??通用?示?言 (Standard Generalized Markup Language,??SGML) ?展而?的。SGML是一?涵???很?的?言,它可以用??生???料系? (或?用) 的?作方式,?且定?了?料描述及?示??。基本上,HTML是SGML的一??用;但 XML?是SGML的一?子集,其??目的是?了提供一???、可使??最佳化的?料呈?方式,因?使用??方式比直接使用完善但??的SGML要?得容易多了。

XML的衍生?格

XML在???初就有?Web考?在?,而且提供了SGML所?有的好?。??器可以利用XML搭配HTML?做?料的?示?呈?。而?了支援XML在 Web 上的??,目前?有??XML的相??格被制定出?。

其中一??格是「延伸???言」 (eXtensible Linking Language ??XLL),???格描述的是一?超??架?,用?同?支援??的HTML超??及更??的延伸超??,其中後者可以??一??指向多?不同的???源。?然SGML也可以定?超???制,不?在SGML的原始?格中??有提到。

另一??格是「延伸?式?言」 (eXtensible Stylesheet Language ??XSL),???格可以提供?XML?式表架?的支援,?也是SGML?格中?有涵?的部份。?式表允???者建立?式?本 (例如粗?、斜?等) 或?式?合,?XML文件?示?,即可??式?本或?合套用到各?XML元件 (Element)上。

????,XML?有SGML百分之八十的功能,但其??度?只有SGML的百分之二十。基本上,?有一???且通用的?料描述方法是十分有用的。?例??,由於XML?有中立的?料交?格式,因此?多不同?型的系?都可以存取其?料。?例??,就我?所知,很多老?的??系?是用各?不同的格式??存?料的,但是?在已?有一些系???程式,可以?很多?系?可以?取或?出XML格式的?料。所以,在某??系?中用XML?成的?料?案可以?易地?出到其他?系?上、或?表成 Web ??、或?出到其它支援XML的?用程式中。也就是?,XML可以?作是一?中介的?料格式,?原本不相容的系?可以互相交??料。

XML是一??料

如果HTML是?了「?示」??,那?,XML就是?了「描述」??。XML是一?可以??料??化?描述?料的???言,且可以?不同的?用程式所?解。XML最大的威力就是它可以?使用者介面??料分?。我??看一???的XML文件,以?解 XML 是如何?作的:

Bill_Pardi@hotmail.com

Eric_Schurman@hotmail.com

DHTML_in_Act ion@hotmail.com

Basic email

This is an XML-based email.

??例子必?注意的重?是,在文件中??有描述如何?示此份文件。?句??,就是?有包含?式的?? (如粗?、斜?字、?排、字?大小等)。因?XML文件的原始?只是描述有哪些?料,??者可以?易地了解?份文件的?容以及??。

XML 文件也被??「自我描述」 (self-describing) 的文件,因?,每一份 XML文件?都?包含一??料必?遵循的??。而由於每一???都可以重?使用,因此,文件建立者可以很容易地利用相同?? (class) 文件的新版本。

??是出自物件?向的程式?念,在物件?向的程式中,??用於描述一群有相同特性的物件。基於各文件的?容??,?文件建立??,可以提供一?很有用的文件分?方法。

有效的???的XML文件

XML 最有用的??特性是:提供文件??化的能力,及提供?料自我描述的能力。要有???能力,文件中必?要有遵循??化 (structual) ?文法化 (grammatical) 的??。接下?的?小?,???介???XML??:「有效的」 (Valid) 和「??的」 (Well-formed),??者描述了文件如何遵循用?控制XML文件的??化?文法化??。

有效的(Valid)文件

XML文件?理器 (XML processor) 可?制?行XML文件?行文件?的??和?容??。?些??包括??XML?格所要求的部份,以及???文件所特?定?的??。其中,第二???是以「文件型?定?」 (Document Type Definiton,??DTD) 存在。DTD 和 XML文件中真正的?料部份是分?的,DTD 可以直接包含在XML文件?部;也可以?XML?立出?,成?一??立的文件。一?有效的XML文件必??格地遵守?????。本??不???介?如何撰?及使用 DTD文件,因?本?只????且不需DTD的XML例子??明。您可以在任何??的XML?考手?或?站上找到更多撰?DTD文件的??,例如XML in Action?本? (by William J. Pardi,Microsoft Press 1999) 和 www.w3.org/xml (W3C的XML?站)。正如您等一下看到的,XML文件不是非得要有DTD文件才行。

??的 (Well-formed) 文件

??的 (Well-formed) 文件所要遵循的???不如有效文件?格。建立一???的XML文件其?是非常??且直?的。以下列表??列出??化的XML文件主要??。本章稍後也??一些例子。

  • 只有一?根元件 (Root Element,或??文件元件Document Element)
  • 根元件部份不能出?在文件中其它元件的?容中
  • 除了根元件之外,文件中其他元件的?始??束??必??成文件中的同一?巢???。?意思是?,如果?始??放在一?元件的?料?容位置上,?束??也必?放置在同一?元件的?料?容位置。

如果XML文件不遵循?些??,??器??出????息。在 Internet Explorer??器中,可以利用Script?言透?物件模型 (Object Model) ?????。本章稍後也?有???理 (Error handling) 的??介?。

我??看看一?XML文件的例子:

Columbine

Aquilegia canadensis

??文件包含了一?PLANT文件元件 (??Document Element或根元件),而COMMON和BOTANICAL是包含在根元件?部的元件。?了要?述???念,以下一?例子是「非」Well-formed的文件,因?它包含了??根元件:

Columbine

Aquilegia canadensis

元件的巢???可建立父/子元件的??。每?子元件 (非根元件的元件) 都?放置在其父元件之?,就像我?在第五章所??的??物件模型一?。???念我?用下面的例子?展示:

子元件??不能放在其父元件的其它子元件之?。例如,下面?段原始?就是一?非well-formed的XML文件:

同?地,根元件的前後??也都不能放在其任一子元件的?部。下面的原始?也不是一?Well-formed的XML文件:

正如您所看到的,XML文件是非常??化的文件,而且必?遵循?格但??的??,以形成well-formed或valid的文件。????加上特定的????,?生了一?有父子元件??的家族????。

XML和Internet Explorer

截至目前?止,我?只介?了XML的?料特性,而未介?XML的?示方式。接著您一定?有????上的疑?,那就是?如何在??上?示XML?料? Internet Explorer包含了??可以?示XML?料的物件,最常被用到的就是DOMDocument 物件。??物件基本上扮演的是?料本身? Internet Explorer ?料?示功能的中介角色。

???物件在分析一份文件?,它?在???中建立文件?所有元件的????;?提供使用XML文件物件模型 (XML Document Object Model) 的方法,也就是允?存取XML?料的介面。??物件模型??露物件的性?、方法、事件、及包含在?料?中真正的?料部份。??的XML 文件物件模型的性?、方法、?事件,在本章稍後的表格21-1到21-3中可找到??的列表。物件模型可以???者???根到分支的所有????。

程式列表21-1是一???的??,它?XML?料送???中,然後?它?示在?幕上。?21-1 ?示的是??的???果。

Code Listing 21-1

start()

var xmlDoc=new ActiveXObject("Microsoft.XMLDOM")

xmlDoc.async=false

xmlDoc.load("email.xml")

function start()

var root=xmlDoc.documentElement

todata.innerText=root.childNodes.item(0).text

fromdata.innerText=root.childNodes.item(1).text

ccdata.innerText=root.childNodes.item(2).text

subjectdata.innerText=root.childNodes.item(3).text

bodydata.innerText=root.childNodes.item(4).text

To:

From:

CC:

Subject:

Body:

程式21-1

JS?取XML - 小乔 - 人往高处走

? 21-1 一????理XML文件的 HTML??

在中的第一段Script程式?只是一?很??的事件?理器,其作用是在??器?入??後,?行start函式的呼叫。我?等一下?解???函式。注意??本身包含了SPAN??,?些??所定?的?域??是最後XML?料的?示空?。

我?先前有提到,XML?理器扮演的是XML文件?HTML?? (或任何其它?似的?示媒?) 的中?媒介?。我?必?先?XML?理器?入,成???上的一?物件,如此我?才能利用Script?言?之?通。

var xmlDoc=new ActiveXObject("Microsoft.XMLDOM")

xmlDoc.async=false

xmlDoc.load("email.xml")

程式?的第一行?入一?DOMDocument物件,然後?它?定???xmlDoc。如此提供使用XML?理器?物件模型的?利。下一行告??理器不要「非同步」(Asychronously) ?入文件,??意思是????等到文件的?料完全下?後再???示??;?定值若改?TRUE,??使?料???的其他部分一起下?,如此一?,就得使用一些?? (通常???ondataavailable或onreadystatechange事件,或readystate性?),??定?料在被使用之前已?入。第三行?是?物件?入本章一?始提到的 email.xml ?? XML 文件。以下是?料????一?始被?入的部份:

DOCUMENT

|---XMLDCL

| |---ATTRIBUTE version "1.0"

+---ELEMENT EMAIL

|---ELEMENT TO

| +---PCDATA "Bill_Pardi@hotmail.com"

此????是以文件物件 (Document Object) 作??端,它包含了一?XML宣告。接著是根元件EMAIL,EMAIL元件包含另一?元件,也就是上面???中所?示TO子元件,其值?Bill_Pardi@hotmail.com,?是一?叫做 PCDATA 的XML?料型?。

一旦??被下?,start函式就?被呼叫。??函式其?十分??,其第一行?建立一?????root,?且?定?XML文件的根?? (root node),?我?可以存取XML?料?。下一行程式?利用 innerText 性?,?一段文字?定?ID?todata 的SPAN元件,如此可以?文字被?示,而它使用的文字是?自XML根元件的第一?子元件。利用 root.childNodes.item(0).text?一段程式?,即可存取根元件的第一?子元件,以取得文字?容。

如果您能?解?段程式,您??知道如何使用 XMLDocument 控制???入一份XML文件,且?XML的???中取得?料。?是?理其他XML文件的基?。

?然上面?的文件所要花?的功夫,要比??且可得到相同效果的HTML文件?得多。但是,其?一些使用XML?有的??我?可以?中?解,最大的??是??可以?成一??本?料。上面所建立的HTML??可以?作其它可以事先定?模?的XML?料的?本。?然建立一?HTML文件?需要花一?功夫,但它可重?使用於不同的?容。?例??,XML文件即使被翻?成法?、德?…等其它?言,仍然可以被插入同一?HTML文件中。

除了利用 DOMDocument 物件外,我??可以用其它的方法可以?XML?料?示成??,例如: XML?料?源物件 (Data Source Object)、XSL、和 XSL Pattern。?些技?加入了更多使用XML??料??化和?存?料的好?,您可以在微?SBN Workshop?站和??附?光碟中找到更多相???。在??CD中,要看 XML 的?料,?在XML TOC (XML Table of Contents) 中??任何一?主?即可。若要?考?上版本,可?上MSDN?上?源?站。下面的表格分?列出XML 文件物件模型中的各?性?。

本文?容取自於《??Dynamic HTML?站技?》(Dynamic HTML in Action Second Edition) 第 21 章。

延伸?示?言 (eXtensible Markup Language;XML) 的出?是?了要??HTML的不足,而非取代 HTML。基本上,XML是一?描述??化?料的方法,不?和HTML文件不同的地方在於:XML文件?不包含任何描述文件?如何?示的??,它只包含了有??及描述性的?成?料。XML之所以能?用在各??用上,是因?它只是一??料格式而已。?例??,一?利用XML撰?成的股市??文件,可以用??器???,也可以?入?料??作?料表?,甚至?可直接用文字??器???。??可延展的特性在某?程度上是做得到的,因?在XML文件中,?料的?示方式??有特定的??,且XML文件只是一???化的格式?料而已。本章?先?XML的背景及基本?念?起,然後再探?如何撰?XML文件,以及MS Internet Explorer是如何?XML整合到??上的。另外需要提醒的是,目前 Netscape Navigator ??有像Internet Explorer一?提供?XML的支援。

表 21-1 XML文件的性?
性??明
async回?一?布林值,?定是否允?非同步下?。?允?非同步下??, ?回值?TRUE;若不允???回值?FALSE 。?/?。
attributes?回包含目前??元件之?性集合物件。若??不能有?性值,?? 回值?null。唯?。
childNodes?回包含目前??元件之所有子??元件的集合。若目前???有任 何子??,??回值?null。唯?。
doctype?回一?包含?有DTD的文件型???。若不含DTD,??回值? null。唯?。
documentElement?回一?包含根元件?料的物件。若?有根元件,??回值?null。 唯?。
firstChild?回一?包含目前??的第一?子??元件,若目前???有任何第 一子??,??回值?null。唯?。
implementation?回DOM?目前XML文件?作所得的物件。唯?。
lastChild?回一?包含目前??的最後一?子??元件,若目前???有任何 最後一?子??,??回值?null。唯?。
nextSibling?回一?包含目前文件??在子??元件集合中的下一?兄弟元件, 若目前???有任何兄弟??,??回值?null。唯?。
nodeName?回一?能代表合格的目前??(元件,?性,或???考)名?字 串,唯?。
nodetype?回一??字,它分?代表目前??的DOM型? (元件、?性、文 字)。唯?。
enodeValu?回特定??的相??文字?料,?不是元件的?料值,而是未剖析 相?於??的?文字,就好像是?性和?理指令(PI),某??料型? ?回?null。?/?。
ondataavaiable?定Ondataavaiable事件?理,只能?。
onreadystatechange?定Onreadystatechange事件?理,只能?。
ownerDocument?回一?物件,它包含目前??的文件之根??。唯?。
parentNode?回包含目前??元件之所有父??元件的集合。若目前???有任 何父??,??回值?null。唯?。
parseError?回一?DOM剖析??物件,它描述了最後的剖析??。若?有? ??生,??回0。唯?。
previousSibling?回一?包含目前文件??在子??元件集合中的上一?兄弟元件, 若目前???有任何兄弟??,??回值?null。唯?。
readyState?回一??字表示目前的XML文件的??。唯?。值如下所示:

0 (尚未初值化) XML物件已?建立,但尚?任何文件?入

1 (?入中) 正在?入,但剖析尚未?始。

2 (?入後) 文件的部分已?下?且?始剖析,但?建立?物件模型。

3 (互?的) 文件已?入的部分之物件模型已?建立。

4 (完成的) 文件完全被?入。??不表示?入成功。

url?回最後一?成功下?文件的URL。若文件只存在???中(非?外 部?案?入),??回null值。唯?。
validateOnParse提示?剖析器文件是否被??。若?True,??被剖析?文件是被 ??的,若?false,文件??被??,且被期望?well-formed。 ?/?。
xml?回特定??和其子?的XML呈?。唯?。

表 21-2 XML文件的方法
方法?明
abort()若??方法在非同步下?期?被呼叫,所有的解析?作?被 停止,在???中文件的任何部分也?被??。
appendChild(newChild)新增一????作特定??的最後一???。
cloneNode(deep)建立?一?特定??完全相同的????,deep??是一 ?布林值,若?True,?不只????而且???其子?元 件。若?False,只有特定???其?性被??。
createAttribute(name)建立一?特定名?的?性。
createCDATASection(data)建立一?CDATA?段,其中包含特定字串?料。
createComments(data)建立一?特定字串的?解。
createCommentFragment()建立一?新的文件片段,不??不把它加入文件?中。若要 ?它加入?中,必?利用insert方法,例如 insertBefore、 replaceChild、或appendChild。
createElement(tagName)建立一?特定??名?(大小?不同)的元件。
createEntinyReference建立一?特定名?的???考,不??不把它加入文件?(name) 中。若要?它加入?中,必?利用insert方法,例如 insertBefore、replaceChild、或appendChild。
createNode(type,name, namespaceURL)?定特定型?、名?及名?空?建立一?新的??。
createProcessingInstruction(target,data)建立一?包含特定目?和?料的?理指令,不??不把它加入文件?中。 若要?它加入?中,必?利用insert方法, 例如insertBefore、replaceChild、或 appendChild。
createTextnode(data)建立一?包含特定?料的新文字??,不??不把它加入 文件?中。若要?它加入?中,必?利用insert方法,例如 insertBefore、replaceChild、或 appendChild。
getElementsByTagName?回一?特定名?的元件集合。使用 "*" 的??名??定, (tagname) ???回所有在文件能找到的元件。
haschildnodes()?回True 若??含有子元件,false??有。
InsertBefore在?考??之前插入一?新子??,newChild ??是一?包 (newChild,refChild) 含新子??位置的物件,而refChild是?考??的位置。若 不包含refChild??,新的子???被插入在子??集合的 最後位置。
load(url)?特定的位置中?入指定的文件,?回True若文件?入成 功,?回False??否。
loadXML(xml/string)?入一?XML文件,或?字串?的文件片段,?回True若 文件?入成功,?回False??否。

nodeformID(idString) ?回一?符合特定值的??,若有符合的物件??回此物 件,若此操作失?,?回null值。

Parsed若目前??和此??的所有的子???,已?被剖析及, ??回值? True,若??的任何部分都尚未被剖析,?? 回null。
removeChild(child)???集合中?除特定的子??,child??就是包含要被 ?除的子??之元件。
replaceChild用提供的新???取代???。若newChild是null,?? (newChild,oldChild) ??不?被取代,而直接?除。
selectNodes(patternString)?回一???集合元件,此元件包含符合提供 XSL pattern 的??。
selectSingleMode?回第一??符合所提供的XSL pattern,若?有??任何 (Pattern String) 符合,??回null。
TransformNode(stylesheet)?回一?字串包含目前??的?理?果和它的子??使用 所提供的XSL?式。

表 21-3 XML 文件的事件
事件?明
Ondataavailable?任何?料可用??引?此Ondataavailable事件。??技巧? 不提示在??文件中有多少?料是可用。
Onreadystatechange?readystate性?改?,??引?Onreadystatechange 事件, 但此事件?不?提供ready state的??值,必?使用readystate 性??取得目前??。

基?之外的其它Scripting 技?

上面介?的?? E-Mail ?例,示?了如何存取XML物件模型,以及使用XML?料。若?一步??察??文件和它的script,我???看到??所??的代?。在我?想??法? Script??一些?,我?加入了一些技巧在其中,以?明script在?多情?下?是不?理想的。?考?下面的??:

  • 用?存取XML文件?和?出?料的script程式,?假定我?不?知道有多少元件存在,同?也知道元件的?序和我?的原始?是相同的,因?我?是利用索引?使用每?元素。??的 script 程式也?可以用在一些?用程式上,但在其他?用程式上可能就不太?合了。
  • script程式能分??每?元件?定位置。??做法用在小型文件上可能?什???;可是如果用在大型或??的文件上,?整??理程序??得?於冗?,而且很可能??百出。
  • HTML文件?不完全是?料?立的文件,因?用?配置版面和?定格式的HTML???跟文字 (如前一?例中的 To:和 From:) ??在一起。若文件必?要翻?成其他?言,??需要同???XML文件?HTML??文件。

我??在就?看一些script 的?作技巧,以避免我???所?的??。

?理XML文件?

在上一?例子中,??者必?知道XML文件中元件的?目和?型,但是如果能使用一些XML物件模型中的其它性?和方法,那?事情就???一些。

在?些有用的性??中,其中有一?是childNodes,??性???回目前??的子??集合。ChildNodes的length性??包含子??的?目。因此,?理??的子????非常容易。?考如下程式? 21-2。

Code Listing 21-2

var xmlDoc=new ActiveXObject("Microsoft.XMLDOM")

xmlDoc.async=false

xmlDoc.load("email.xml")

root = xmlDoc.documentElement

for (var i=0; i

   alert(root.childNodes.item(i).nodeName+" = "+root.childNodes.item(i).text)

}

程式 21-2

JS?取XML - 小乔 - 人往高处走

?21-2 ??窗包含第一?元素的名???容

?在?入HTML文件後,???一?串?生 5 ???窗,每???窗都?包含元件在 XML 文件中的名???容。第一???窗如?21-2所示。?理的程式利用了root.childNodes.length性???? XML 文件,以得知根元件包含了多少?子元件。接著,script??入一??圈,巡行??根元件的所有子元件,?取得每一?子??的名? (利用nodeName性?) 和文字?容,直到最後一????止。

不?,??程式?理???的第一?而已,若根元件的任何子元件也有子元件,??被程式21-2所忽略。Inbox.xml?案是????的文件,此文件是一?多?的???。注意第一?email甚至包含一?元件(CC),?是在其它email所?有的。

Bill_Pardi@hotmail.com

Eric_Schurman@hotmail.com

DHTML_in_Act ion@hotmail.com

My document is a tree.

This is an example of a tree structure.

Bill_Pardi@hotmail.com

Eric_Schurman@hotmail.com

XML is cool.

This is a simple message.

Bill_Pardi@hotmail.com

Eric_Schurman@hotmail.com

Here is that co de.

I send too many emails.

?需要更??的script才能得到和程式21-1相同型?的?果,也就是?示在??器中的email?容。程式21-3?XML文件起??始,然後??地由上往下巡行,?且?示每一???的?容。如果有一???有子??,其子????被??,?且?示其?容。?21-3?示?行此程式的?果。

Code Listing 21-3

var xmlDoc = new ActiveXObject("microsoft.xmldom")

xmlDoc.async=false

xmlDoc.load("inbox.xml")

root=xmlDoc.documentElement

newHTML=""

function start(){

buildTree(root)

content.innerHTML=newHTML

}

function buildTree(passedNode){

var children = passedNode.childNodes.length

for (var j=0; j

Node=passedNode.childNodes.item(j)

if (Node.nodeName=="EMAIL"){ newHTML+=("

"+Node.nodeName+" "+j) }

if (!Node.hasChildNodes()){

newHTML+=( "
"+Node.parentNode.nodeName+": "+Node.text )

}

buildTree(Node)

}

}

load="start()">

程式 21-3

JS?取XML - 小乔 - 人往高处走

?21-3 ?示XML文件的?容

我?一起??到尾?看一下??程式。?文件被?入後,script????入XML?案,?XML的根元件?定???root,接著建立空白 newHTML??,????等一下在script中?用到。?文件?束?入,在BODY??中的onload事件?理?呼叫start函式,此函式??流呼叫buildtree函式,??送XML根元件?它。

??例子主要?作是由buildTree函式?完成的,?是一??回函式,也就是??一些特殊情??生?,它?自己呼叫自己。??函式基本上可以??目前??,及?查每???多少?子??。若??含有子??,?函式?再次呼叫自己一次,?入第一?子???自己。一旦下?一??有子??的??,它?加入 newHTML??及一些HTML原始?,?描述目前??的?料,然後往上一?回到它的父??。藉由重???的?作,它可以巡行??整??料?。接著,?深入看一?函式的片段:

var children = passedNode.childNodes.length

for (var j=0; j

函式一??就找出目前有多少子??,然後?值?定?children??。下一行由一?for?圈?始,它???目前??的每一?子??重??行。

Node=passedNode.childNodes.item(j)

if (Node.nodeName=="EMAIL"){ newHTML+=("

"+Node.nodeName+" "+j) }

if (!Node.hasChildNodes()){

newHTML+=( "
"+Node.parentNode.nodeName+":

接著,目前的子???被?定?Node??。由於我?希望?料中的每一?email都可以分?,因此加入了上面的第二行。若??的名?? "EMAIL",?除了????的名?和??之外,??加入段落??

到newHTML中,我?也??是否Node.parentNode==root,因?只有在root之下的元件才有可能是EMAIL元件。

BuildTree(Node)

For?圈的最後一行再次呼叫buildtree函?,??目前???去。最後,每?元件都呼叫了此函式。更?性且有完整功能的XML tree 巡行程式可以在http://www.microsoft.com/gallery/sample/xml/tree_viewer/default.asp找到,???Tools and Samples和XML Tree viewer部分。

您??可以注意到,使用?些技巧可以?HTML文件更加?性且功能更?,?然??文件只是一?特定?型的XML文件?本而已。但是??的技巧??HTML?XML能完美的互相??。

???理

XML的物件模型提供了?多方法???者??理 XML 文件所?生的??。其中一?是文件物件的parseError性?,它提供了XML文件?生???的??,???者可以?行?理。基本上,使用者可能不?需要去?理??子的??。

ParseError性?提供了每?可能?生??的程式?。??者可以使用?些程式做下列事情:

  • ?忙?XML文件?script除?。
  • 告知使用者??所在,?提供建?的解?方案。
  • ?某????截,然後在背景修???。

下面的程式??明parseError如何告知使用者?生??。

Var xmlDoc = new ActiveXObject("Microsoft.xmldom");

XmlDoc.load("email.xml");

If (xmlDoc.parseError.reason == " ") {

Alert("Document loaded successfully")

}

else {

alert("The Following error occurred:"+xmlDoc.parseError.errorCode)

}

??技巧可以用於除?和?使用者可以避???。

XML Data Island

在??的例子,我??XML ?作一??料?源,??HTML?作?示的方法。?HTML文件被?示?,XML ? HTML ?被?作是??互相影?的?立文件。另一???是使用XML data islands。Data islands可以???者在HTML文件直接包括XML片段。不??於??方法的效果,目前有正反??意?,正面的意?是:

  • 您不需分?出XML文件
  • 您不需利用script?入XML?料
  • 您不需透?使用Object元素或ActiveXObject物件

另外也有一些?面的意?,端?如何使用data islands:

  • XML data 不再?立於HTML?案
  • ?於其他?用程式或HTML文件,XML data失去了可?性
  • 如果XML的原始?散落在HTML原始?中,XML 也??更?管理。XML Data Islands可以是行?XML或外部??XML文件。

?理行?XML Data Islands

要使用行?XML Data Islands,只要很??地直接插入一段XML程式?到HTML文件就好。XML文件的?容放在 ?一???中。?了示?,我?修改程式列表 21-1 ,?email.xml嵌入到html文件中,然後?程式?改?成程式列表 21-4。?生的?果和先前的例子完全一?,如?21-1。

Code Listing 21-4

Bill_Pardi@hotmail.com

Eric_Schurman@hotmail.com

DHTML_in_Act ion@hotmail.com

Basic email

This is an XML-based email.

function start(){

xmlDoc=email

var root=xmlDoc.documentElement

todata.innerText=root.childNodes.item(0).text

fromdata.innerText=root.childNodes.item(1).text

ccdata.innerText=root.childNodes.item(2).text

subjectdata.innerText=root.childNodes.item(3).text

bodydata.innerText=root.childNodes.item(4).text

}

load="start()">

To:

From:

CC:

Subject:

Body:

程式 21-4

首先注意?行?XML Data包含在 ??中, 元素?不是根??。反之,它是一?HTML??,???器可以辨?包含在 ??之?就?被?作是XML。也要注意一下 ??有ID?性,所以它可以被script叫用。新的程式? xmlDoc=email相等於使用XMLDOM ActiveXObject,然後??入一?特定的XML文件。事?上,使用的?是同一??理程式;只是用不同的方法?存取而已。除了行?XML Da ta Island,?有一?方法可以用??外部的XML文件?使用 ??。

?理??XML Data Islands

要利用 ?????XML文件,您只要使用 ??的SRC?性就好。我?可以利用下面的程式?,?取代上述的文件中之整?文件元素。

此?行?果和前面例子完全相同。??好?在於XML?料仍然?html文件分?。本?上,??方法?理的方式十分像ActiveX Control方式,除了??器必????理control及?入文件以外。

??的?性

??包含,某些?外的?性,?文件?入後,?生的事件可提供更多的控制。

VALIDATEONPARSE ?性指出?它被解析?,文件是否??被??。它的??值?True。下面是一?例子:

ASYNC ?性意指是否文件要非同步下?。它的??值?True。下面是一?例子:

XML是否?所有?生在web上??的解?方案?或者只是??大的宣??事?上都不是。XML已??得不同?域的?界所支援,而不??是在Web 上而已。?表示?有?多承?,特?是在不同的??器都能支援XML的情?下。本章只是提供十分??的 XML 概略?明,您可以在W3C?站,及一本不?的XML?考手?( XML in action by William J. Pardi Microsoft Press) 中找到更多XML的??。

转载于:https://my.oschina.net/gisvg/blog/5732

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值