首页 » XML » DOMParser

DOMParser

为了将XML解析为DOM文档,Firefox引入了DOMParser类型;后来,Opera也支持了这个类型。在解析XMl之前,首先必须创建一个DOMParser的实例,然后在调用parseFromString()方法。这个方法接受两个参数:要解析的XMl字符串和内容类型(内容类型始终都应该是“text/xml”)。返回的值是一个Document的实例。来看下面的例子:

var parser = new DOMParser();
var xmldom = parser.parseFromString("<root><child/></root>", "text/xml");
alert(xmldom.documentElement.tagName);  //"root"
alert(xmldom.documentElement.firstChild.tagName);  //"child"
var anotherChild = xmldom.createElement("child");
xmldom.documentElement.appendChild(anotherChild);
var children = xmldom.getElementsByTagName("child");
alert(children.length);  //2

在这个例子中,我们把一个简单的XML字符串解析成了一个DOM文档。解析得到的DOM结构以<root>作为其文档元素,该元素还有一个<child>子元素。此后,就可以使用DOM方法对返回的这个文档进行操作了。

DOMParser只能解析格式良好的XML,因而不能把HTML解析为HTML文档。在发生错误时,仍然会从parserFromString()中返回一个Document对象,但这个对象的文档元素是<parsererror>,而文档元素的内容是对解析错误的描述。下面是一个例子:

<parsererror xmlns="http://www.mozilla.org/newlayout/xml/parsererror.xml">XMLParsing Error: no element found Location: file:///I:/My%20Books/Professional%20JavaScript/Second%20Edition/Examples/Ch15/DOMParserExample2.htm Line Number 1, Column 7: <sourcetext> & lt;root & gt; ------^</sourcetext > < /parsererror>

Firefox和Opear都会返回这种格式的文档。Safari和Chrome返回的文档也包含<parsererror>元素,但该元素会出现在发生解析错误的地方。IE9会在调用parseFromString()的地方抛出一个解析错误。由于存在这些差别,因此确定是否发生解析错误的最佳方式就是,使用一个try-catch语句块,如果没有错误,则通过getElementsByTagName()来查找文档中是否存在<parsererror>元素,如下面的例子所示:

var parser = new DOMParser(),
    xmldom,
    errors;
try {
    xmldom = parser.parseFromString("<root>", "text/xml");
    if (errors.length > 0) {
        throw new Error("Parsing error!");
    }
} catch (ex) {
    alert("Parsing error!");
}

这个例子显示,要解析的字符串中缺少了闭标签</root>,而这会导致解析错误。在Firefox和Opera中,文档元素将是<parsererror>,而在Safari和Chrome中,<parsererror>是<root>的第一个子元素。调用getElementsByTagName(“parsererror”)能够应对这两种情况。如果这个方法返回了元素,就说明有错误发生,继而通过一个警告框显示出来。当然,你还可以进一步,从错误元素中提取出错误信息。

此文章发表在 XML. 将 固定链接 加入收藏.