引用 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 是如何?作的:

[email protected]

[email protected]

DHTML_in_Act [email protected]

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

? 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 "[email protected]"

此????是以文件物件 (Document Object) 作??端,它包含了一?XML宣告。接著是根元件EMAIL,EMAIL元件包含另一?元件,也就是上面???中所?示TO子元件,其值[email protected],?是一?叫做 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

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

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

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

[email protected]

[email protected]

DHTML_in_Act [email protected]

My document is a tree.

This is an example of a tree structure.

[email protected]

[email protected]

XML is cool.

This is a simple message.

[email protected]

[email protected]

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

?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

[email protected]

[email protected]

DHTML_in_Act [email protected]

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的??。

你可能感兴趣的:(引用 JS?取XML)