本章最后提出一个HTML 网页,该网页会开启一份XML 文件并使用DOM 的属性来回报网页包含的任何错误。如果文件中没有文件形态宣告,此网页只会传回格式正确性的错误讯息。如果文件包含了文件形态宣告,则网页将回报格式正确性与有效性的错误讯息。你可以利用此网页来测试任何的XML 文件。
如何使用有效性测试网页
1. 在文字编辑器中, 开启 有效性测试网页 Validity Test.htm 。(你可以在随书光盘与下节的列表9-10 中找到此网页。)
2. 编辑网页中 BODY 标签里的 data island ,好让其SRC 属性被指定成你想要测试的XML 文件的URL 值。例如,要测试文件Raven.xml,你需要将data island编辑如下:
<XML ID="dsoTest" SRC="Raven.xml"></XML>
3. 使用文字编辑器中的 Save 指令,来储存更改过的网页。
4. 将网页 开启 于Internet Explorer 5 中:
当Internet Explorer 5 中XML 处理程序处理网页首次遭遇错误时,此网页将显示一个消息框,显示出错误的相关信息。
下图为处理的文件毫无错误时,消息框显示的结果:
下图则为处理文件遭遇错误时,消息框展示错误讯息的例子:
有效性测试网页如何运作
到目前为止你在本章中所看到的HTML 网页,都做了两个简化处理的假设:
被连结的XML 文件是正确不含错误的。如果假设不成立,将无法得到任何表示XML 文件资料的节点。
当script 试着存取XML 文件的资料时,浏览器已经完成加载和处理此文件的工作。如果假设不成立,部分XML 数据将无法取得。
如果上述假设中任何一个不成立时,部分或全部的XML 资料将无法显示在网页上。这里提出的有效性测试网页将告诉你,如何测试被链接的XML 文件是否包含错误。你可以在你撰写的网页中加入类似的测试,如果文件中含有错误时,将显示对你有帮助的讯息。有效性测试网页也显示了script 程序如何能够确定在存取XML 文件数据前,XML 文件已经完全被加载且处理完毕。为了简单化,这些技术从本章先前范例中省略,但你可以在你自己的网页中运用这些技术。
列表9-10 显示有效性测试网页的内容。(你可以在随书光盘的Validity Test.htm 档案中找到列表9-10。)
Validity Test.htm
<!--File Name:Validity Test.htm -->
<HTML>
<HEAD>
<TITLE>Validity Tester</TITLE>
<SCRIPT LANGUAGE="JavaScript" FOR="window" EVENT="ONLOAD">
Document =dsoTest.XMLDocument;
if (Document.readyState =4)
DisplayError ();
else
Document.onreadystatechange =DisplayError;
function DisplayError ()
{
if (Document.readyState !=4)
return;
message ="parseError.errorCode:"
+Document.parseError.errorCode +"\n"
+"parseError.filepos:"
+Document.parseError.filepos +"\n"
+"parseError.line:"
++Document.parseError.line
+"\n"
+"parseError.linepos:"
+Document.parseError.linepos +"\n"
+"parseError.reason:"
+Document.parseError.reason +"\n"
+"parseError.srcText:"
+Document.parseError.srcText +"\n"
+"parseError.url:"
++Document.parseError.url;
alert (message);
}
</SCRIPT>
</HEAD>
<BODY>
<!--Set SRC to the URL of the XML document you want to check:-->
<XML ID="dsoTest " SRC="Inventory.xml"></XML>
</BODY>
</HTML>
HTML 网页包含了一个script 程序,当浏览器第一次为网页开启窗口时会执行该script 程序:
<SCRIPT LANGUAGE="JavaScript" FOR="window" EVENT="ONLOAD">
/*script code ...*/
</SCRIPT>
Script 程序首先将获得Document 节点:
Document =dsoTest.XMLDocument;
然后script 程序将测试Document 节点的readyState 属性。如果readyState 属性被设定为4,代表所有的XML 数据已经被加载并处理完毕,此时script 程序会立即呼叫DisplayError 函式来显示此文件的错误状态。然而,如果readyState 属性不是被设定成4,script 程序会将DisplayError函式指定给Document 节点的onreadystatechange 属性,导致每当readyState 属性改变时,浏览器将会呼叫DisplayError 函式来显示错误讯息:
if (Document.readyState =4)
DisplayError (); else Document.onreadystatechange =DisplayError;
表格9-3 描述了这些Document 属性。
如果readyState 属性还未被设定为4,函式DisplayError 会立即返回。(当属性readyState 被设定成4 时,函式DisplayError 将再被呼叫。)如果函式继续执行,将显示Document 节点的parseError 成员对象中所有的属性。这些属性彻底地描述XML 文件的错误状态:
function DisplayError ()
{
if (Document.readyState !=4)
return;
message ="parseError.errorCode:"
+Document.parseError.errorCode +"\n"
+"parseError.filepos:"
+Document.parseError.filepos +"\n"
+"parseError.line:" ++Document.parseError.line
+"\n"
+"parseError.linepos:"
+Document.parseError.linepos +"\n"
+"parseError.reason:"
+Document.parseError.reason +"\n"
+"parseError.srcText:"
+Document.parseError.srcText +"\n"
+"parseError.url:" ++Document.parseError.url;
alert (message);
}
如果文件中没有任何错误,parseError.errorCode 属性会被设定为0,而其它属性不是被设定为0 就是空白。如果文件中含有错误,属性parseError.errorCode 会包含一个错误数值码,而其它的属性会描述此错误的相关信息。