好学IT学院:IT信息技术分享交流平台
来源:互联网  作者:本站整理  发布时间:2008-08-13  ★★★加入收藏〗〖手机版
Firefox中的XML DOM探讨
摘要:现在我们来看看Firefox中的XMLDOM实现,Firefox的开发人员采用更为标准的方法,将其作为JavaScript实现的一部分。Mozilla确保所有基于Gecko的浏览器的所有平台都支持XMLDOM。…

3. 在Firefox中处理错误

Firefox与IE的错误处理并不一样。当IE遇到错误时,它会填充parseError对象;而当Firefox遇到错误时,它会将包含错误信息的XML文档载入到XML DOM文档中。看下面的这个例子:

var sXml = "<root><person><name>Jeremy McPeak</name></root>";
var oParser = new DOMParser();
var oXmlDom = oParser.parseFromString(sXml,"text/xml");

if (oXmlDom.documentElement.tagName != "parsererror") {
  //没有错误发生,进行所需操作
} else {
  alert("An Error Occurred");
}

在突出显示的代码行中,你会发现其中将产生一个错误:XML字符串格式不正确(因为<person>元素不完整,没有相应的</person>元素)。当载入错误的XML时,XML DOM对象将会载入一个documentElement为<parsererror/>的错误文档。我们可以通过检查documentElement的tagName属性来很容易地确定是否发生错误。如果tagName属性不是parsererror,就可以确定没有发生任何错误。

在本例中,可能会生成如下所示的错误文档:

<parsererror xmlns="http://www.mozilla.org/newlayout/xml/parsererror.xml">XML
Parsing Error: mismatched tag. Expected: </person>.
Location: http://yoda/fooreader/test.htm
Line Number 1, Column 43:<sourcetext><root><person><name>Jeremy
McPeak</name></root>
------------------------------------------^</sourcetext></parsererror>

所有的错误信息都包含在错误文档的文本中。如果要通过程序使用这些错误信息,那么首先就要对其进行解析。最简单的方法是使用一个稍长的正则表达式:

var reError = />([\s\S]*?)Location:([\s\S]*?)Line Number (\d+), Column (\d+):<sourcetext>([\s\S]*?)(?:\-*\^)/;

该正则表达式将错误文档分为五个部分:错误消息、发生错误的文件名、行号、该行中发生错误的位置,以及发生错误的源代码。使用正则表达式对象的test()方法可以使用这些信息:

if (oXmlDom.firstChild.tagName != "parsererror") {
  //没有错误发生,进行所需操作
} else {
  var oXmlSerializer = new XMLSerializer();
  var sXmlError = oXmlSerializer.serializeToString(oXmlDom);
  var reError = />([\s\S]*?)Location:([\s\S]*?)Line Number (\d+), Column (\d+):<sourcetext>([\s\S]*?)(?:\-*\^)/;
  reError.test(sXmlError);

正则表达式捕获到的第一部分数据是错误消息,第二部分是文件名,第三部分是行号,第四部分是行内位置,第五部分是源码。你可以使用这些解析后的信息来创建自定义的错误消息:

var str = "An error occurred!!\n" +
  "Description: " + RegExp.$1 + "\n" +
  "File: " + RegExp.$2 + "\n" +
  "Line: " + RegExp.$3 + "\n" +
  "Line Position: " + RegExp.$4 + "\n" +
  "Source Code: " + RegExp.$5;
alert(str);

如果发生错误,那么alert()方法会以易于阅读的格式在警告框中来显示相关的错误信息。

详解CCProxy代理服务器软件的帐号管理和使用方法
  1、帐号管理基本概念 代理服务器CCProxy的帐号管理分为三个部分。分别是允许范围,验证方式和帐号设置。允许范围有三种选择: 允…
  • 好学考试H5触屏版开放内测
  • 好学触屏公众号虎力全开、杨帆起航!