日期:2008-07-29  浏览次数:20558 次

XML 对象模型

------------------------------------------------------------

来源:节选自 实战XML第二版(ScriptXML):Appendix A XML 对象模型

这个附录将详细地探究XML 对象模型,包括组成模型的对象、它们的属性与方法,和他们如何被应用在应用程序中。

对象模型结构

对象是一种树状结构的组织。树的主干便是Document 对象,其它的对象便由此对象分支而来。

XML 对象模型由四种基本的对象所组成:

. document 对象-XML 数据来源
. node 对象-一个父节点或其中的一个子节点
. nodeList 对象—兄弟节点的清单
. parseError 对象—一个无内容的对象,用来接收解析错误的讯息

图A-1 显示了这些对象间的关系。

DOCUMENT
|
| |------------NODE
|-------NODE-------|------------NODE
| |------------NODE
|
|--------------NODE
|--------------NODE
|--------------NODE
|--------------NODE

图A-1:XML 对象模型

在对象模型中的每个对象拥有特定的属性或方法,或两者都有。若使用Script 程序代码,内容作者可以直接地使用这些属性和方法来取得信息并运用XML 数据。这个附录将完整地介绍XML对象模型,并检视这些对象和相关的属性与方法。
既然本书是讨论如何运用XML 的,就必须深入了解对象模型的运作。稍后在这附录中,有一些如何在对象模型中使用对象的范例。要使用这些范例,您将需要列在A-1 中的文字码,也可以在随书光盘中找到它(Appxa\LastA_1.XML)。

<?XML version="1.0"?>
<!DOCTYPE EMAIL SYSTEM "LstA_2.dtd">
<EMAIL PRIORITY="HIGH">
<TO>Jodie@msn.com</TO>
<FROM>Bill@msn.com</FROM>
<CC>Philip@msn.com</CC>
<BCC>Naomi@msn.com</BCC>
<SUBJECT>My document is a tree.</SUBJECT>
<BODY>This is an example of a tree structure.</BODY>
</EMAIL>

[文字码A-1]

您可以从文件类型宣告中看到,这份文件使用了DTD。这份DTD 文件如文字码A-2 所示,您也可以在随书光盘中的AppxA\LstA_2.dtd 找到它。

<!-- This is an XML document that could be used as an email template. -->
<!ELEMENT EMAIL (TO+, FROM, CC*, BCC*, SUBJECT?, BODY?)>
<!ATTLIST EMAIL
LANGUAGE (Western|Greek|Latin|Universal) "Western"
ENCRYPTED CDATA #IMPLIED
PRIORITY (NORMAL|LOW|HIGH) "NORMAL">
<!ELEMENT TO (#PCDATA)>
<!ELEMENT FROM (#PCDATA)>
<!ELEMENT CC (#PCDATA)>
<!ELEMENT BCC (#PCDATA)>
<!ATTLIST BCC
HIDDEN CDATA #FIXED "TRUE">
<!ELEMENT SUBJECT (#PCDATA)>
<!ELEMENT BODY (#PCDATA)>

[文字码A-2]

最后,XML 文件将透过HTML 网页来显示,下面便是HTML 的文字码(在随书光盘AppxA\LstA_3.htm 中)。

<!DOCTYPE HTML PUBLIC "_//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScrip"_ FOR=window EVENT=onload>
showMe();
</SCRIPT>
<SCRIPT LANGUAGE="&#106avascript">
var XMLDoc = new ActiveXObject("microsoft.XMLdom");
XMLDoc.load("LstA_1.XML");
function showMe()
{
// Insert sample code here.
}
</SCRIPT>
<TITLE>Code Listing A-3</TITLE>
</HEAD>
<BODY>
</BODY>
</HTML>

[文字码A-3]

请注意在A-3 文字码中,showMe 函式并没有包含程序代码。因为要插入什么程序代码是由您来决定的,这个程序片段只是要让您了解showMe 函式的功用。
---------------------------------------------------------------------------------
[Note]
使用附录中的范例时,您可以在LstA_3.htm 的showMe 函式中输入片断程序代码,也可以使用随书光盘中AppxA 目录中的HTML 档案。
---------------------------------------------------------------------------------






一、Document 物件

如同前面所提到的,这Document 对象代表这份文件的数据来源。这个对象模型允许文件作者使用任何支持XML 处理器的浏览器或应用程序,透过script 程序代码来加载XML 文件。
举例来说,一个文件能藉由建立一个ActiveX control 的实例,并且呼叫load 方法(稍后讨论)来加载文件,如同范例中的HTML 码:

var XMLDoc = new ActiveXObject("microsoft.XMLdom");
XMLDoc.load("LstA_1.XML");

加载也可借着使用Java applet 来完成,如下所示:

<SCRIPT>
XMLdso.load("LstA_1.XML");
</SCRIPT>
<BODY>
<APPLET CODE=com.ms.XML.dso.XMLDSO.class
WIDTH=100% HEIGHT=0 ID=XMLdso MAYSCRIPT=true>
<