分享
 
 
 

浏览整个XML文件

王朝other·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

在接下来的练习中,你将建立一份HTML 网页,内含可以浏览代表整个XML 文件节点的DOM阶层架构的script,由根Document 元素开始。对于每个节点,script 会显示节点的名称、形态和节点值。Script 程序会将每节点的信息区块缩排,依照节点在阶层结构中的层级来排列。你可以使用此网页来显示代表任何XML 文件的节点,和学习到更多有关DOM 如何以节点来将不同形态的XML 文件与文件组件结构化。

建立浏览节点的网页

1. 在文字编辑器中, 开启 一份新的、空白的文本文件,然后输入显示于列表9-9 中的HTML 网页内容。(你可以在随书光盘的 ShowNodes.htm 档案中找到。)

2. 利用文字编辑器的 存盘 指令,将文件储存于本机硬盘中,文件名为 ShowNodes.htm :

ShowNodes.htm

<!--File Name:ShowNodes.htm -->

<HTML>

<HEAD>

<TITLE>Show DOM Nodes</TITLE>

<SCRIPT LANGUAGE="JavaScript" FOR="window"

EVENT="ONLOAD">

/*get Document node:*/

Document =dsoXML.XMLDocument;

/*start by passing the Document node to

DisplayNodes:*/

DisplayDIV.innerText

=DisplayNodes(Document,0);

function DisplayNodes (Node,IndentLevel)

{

/*declare local variables for

recursion:*/

var i;

var DisplayString ="";

/*build up the indentation for this

level:*/

Indent ="";

IndentDelta =" ";

for (i=0;i <IndentLevel;++i)

Indent +=IndentDelta;

/*display the current node 's

properties:*/

DisplayString +=Indent +"nodeName:"

+Node.nodeName +"\n"

+Indent

+"nodeTypeType:"

+Node.nodeType +"\n"

+Indent

+"nodeTypeString:"

+Node.nodeTypeString

+"\n"

+Indent +"nodeValue:"

+Node.nodeValue +"\n

\n";

/*display each of the node 's attribute

child nodes:*/

Indent +=IndentDelta;

for (i=0;

Node.attributes !=null

&&i <Node.attributes.length;

++i)

DisplayString +=Indent +"nodeName:"

+Node.attributes(i).nodeName +"\n"

+Indent

+"nodeTypeType:"

+Node.attributes(i).nodeType +"\n"

+Indent

+"nodeTypeString:"

+Node.attributes(i).nodeTypeString

+"\n"

+Indent +"nodeValue:"

+Node.attributes(i).nodeValue

+"\n \n";

/*display each of the node 's

nonattribute child

nodes:*/

for (i=0;i <Node.childNodes.length;++i)

DisplayString +=

DisplayNodes

(Node.childNodes(i),IndentLevel +1);

/*return the string containing the

results:*/

return DisplayString;

}

</SCRIPT>

</HEAD>

<BODY>

<XML ID="dsoXML " SRC=="Inventory Dom.xml"></XML>

<H2>XML Document Object Model (DOM)Nodes</H2>

<DIV ID="DisplayDIV"></DIV>

</BODY>

</HTML>

||||||script 程序一开始将Document 节点传给DisplayNodes 函式,此函式会传回该Document 节点及其子节点上的显示信息。Script 程序会将显示信息指定给名为DisplayDIV 的DIV 元素中的innerText 属性,其中DIV 元素是位于网页中的BODY标签中。而网页接着将显示此信息。

DisplayDIV.innerText =DisplayNodes(Document,0);

函式DisplayNodes 的第二个参数指出显示节点资料所使用的缩排等级。函式DisplayNodes 的宣告如下所示:

function DisplayNodes (Node,IndentLevel)

函式的主要执行步骤如下所示:

函式将适当数量的空格符储存在变量Indent 中,此变量被用来在每一行节点信息的一开始建立缩排空间。缩排所用的空格符的个数是由DisplayNodes 的传入参数IndentLevel 所决定:

/*build up the indentation for this level:*/

Indent ="";

IndentDelta =" ";

for (i=0;i <IndentLevel;++i)

Indent +=IndentDelta;

函式会储存目前节点的显示信息-意即,透过Node 参数传送给函式DisplayNodes 的节点(最初是文件节点):

/*display the current node 's properties:*/

DisplayString +=Indent +"nodeName:"

+Node.nodeName +"\n"

+Indent +"nodeTypeType:"

+Node.nodeType +"\n"

+Indent +"nodeTypeString:"

+Node.nodeTypeString +"\n"

+Indent +"nodeValue:"

+Node.nodeValue +"\n \n";

提示

如果你想要看看每个节点的额外属性,你可以把这些属性加在程序代码区块前。你可以使用表格9-2 中提供的任何的共同节点属性。然而,不要使用任何特定节点形态的属性(例如表格9-3 中属于Document 节点的特定属性),因为并不是所有节点形态都具有这些属性。

函式会储存目前节点子Attribute 节点的显示信息。缩排空间会随着阶层等级的增加而增加,这里阶层等级是代表这些是目前节点的其子节点:

/*display each of the node 's attribute child nodes:*/

Indent +=IndentDelta;

for (i=0;

Node.attributes !=null

&&i <Node.attributes.length;

++i)

DisplayString +=Indent +"nodeName:"

+Node.attributes(i).nodeName +"\n"

+Indent +"nodeTypeType:"

+Node.attributes(i).nodeType +"\n"

+Indent +"nodeTypeString:"

+Node.attributes(i).nodeTypeString

+"\n"

+Indent +"nodeValue:"

+Node.attributes(i).nodeValue

+"\n \n";

注意

函式DisplayNodes 并不会显示Attribute 节点中不必要的子Text 节点,因为从Attribute 节点本身的nodeValue 属性直接取得属性值是更为方便的方法。

借着呼叫这些节点的函式,函式DisplayNodes 会储存每个节点的非属性子节点的显示信息。这些就是所谓递归方式的函式呼叫,如下所示:

/*display each of the node 's nonattribute child nodes:*/

for (i=0;i <Node.childNodes.length;++i)

DisplayString +=

DisplayNodes (Node.childNodes(i),IndentLevel

+1);

函式DisplayNodes 最后借着传回包含所有节点信息的字符串作为结束:

/*return the string containing the results:*/

return DisplayString;

3. 在Internet Explorer 5 中开启 ShowNodes.htm 档案。

注意,nodeTypeString 属性以小写字符来包含所有的节点形态。(例如,形态「Document」 和 「Processing-Instruction」变成「document」与「processinginstruction」来储存其形态名称)

一开始,网页显示 Inventory Dom.xml 档案中的XML 文件(在列表9-1 与随书光盘中都有提供)。第一部分的显示结果如下面网页中所示。

4. 要观看其它XML 文件的节点结构,可以编辑网页的data island 来达成。例如,要观看档案Inventory Valid Entity.xml(列表6-1 和随书光盘中都有提供)的节点结构,你可以将data island 的数据修改如下:

<XML ID="dsoXML " SRC="Inventory Valid Entity.xml"></XML>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有