Firefox 专门为把XML 解析为DOM文档新增了DOMParser 类型,后来所有其他浏览器也实现了该
类型。要使用DOMParser,需要先创建它的一个实例,然后再调用parseFromString()方法。这个方
法接收两个参数:要解析的XML 字符串和内容类型(始终应该是"text/html")。返回值是Document
的实例。来看下面的例子:
let parser = new DOMParser();
let xmldom = parser.parseFromString(“”, “text/xml”);
console.log(xmldom.documentElement.tagName); // “root”
console.log(xmldom.documentElement.firstChild.tagName); // “child”
let anotherChild = xmldom.createElement(“child”);
xmldom.documentElement.appendChild(anotherChild);
let children = xmldom.getElementsByTagName(“child”);
console.log(children.length); // 2
这个例子把简单的XML 字符串解析为DOM文档。得到的DOM 结构中是document 元素,
它有个子元素。然后就可以使用DOM 方法与返回的文档进行交互。
DOMParser 只能解析格式良好的XML,因此不能把HTML 解析为HTML文档。在发生解析错误时,
不同浏览器的行为也不一样。Firefox、Opera、Safari 和Chrome 在发生解析错误时,parseFromString()
方法仍会返回一个Document 对象,只不过其document 元素是,该元素的内容为解
析错误的描述。下面是一个解析错误的示例:
XML
Parsing Error: no element found Location: file:// /I:/My%20Writing/My%20Books/
Professional%20JavaScript/Second%20Edition/Examples/Ch15/DOMParserExample2.js Line
Number 1, Column 7:<root> ------^
Firefox 和Opera 都会返回这种格式的文档。Safari 和Chrome 返回的文档会把元素
嵌入在发生解析错误的位置。早期IE 版本会在调用parseFromString()的地方抛出解析错误。由于
这些差异,最好使用try/catch 来判断是否发生了解析错误,如果没有错误,则通过getElements-
ByTagName()方法查找文档中是否包含元素,如下所示:
let parser = new DOMParser(),
xmldom,
errors;
try {
xmldom = parser.parseFromString(“”, “text/xml”);
errors = xmldom.getElementsByTagName(“parsererror”);
if (errors.length > 0) {
throw new Error(“Parsing error!”);
}
} catch (ex) {
console.log(“Parsing error!”);
}
这个例子中解析的XML 字符串少一个标签,因此会导致解析错误。IE 此时会抛出错误。
Firefox 和Opera 此时会返回document 元素为的文档,而在Chrome 和Safari 返回的文
档中,是的第一个子元素。调用getElementsByTagName(“parsererror”)
可适用于后两种情况。如果该方法返回了任何元素,就说明有错误,会弹警告框给出提示。当然,此时
可以进一步解析出错误信息并显示出来。
XMLSerializer 类型
与DOMParser 相对,Firefox 也增加了XMLSerializer 类型用于提供相反的功能:把DOM文档
序列化为XML 字符串。此后,XMLSerializer 也得到了所有主流浏览器的支持。
要序列化DOM文档,必须创建XMLSerializer 的新实例,然后把文档传给serializeToString()
方法,如下所示:
let serializer = new XMLSerializer();
let xml = serializer.serializeToString(xmldom);
console.log(xml);
serializeToString()方法返回的值是打印效果不好的字符串,因此肉眼看起来有点困难。
XMLSerializer 能够序列化任何有效的DOM对象,包括个别节点和HTML 文档。在把HTML 文
档传给serializeToString()时,这个文档会被当成XML 文档,因此得到的结果是格式良好的。
javascript基础从小白到高手系列一千二百零七:DOMParser 类型
最新推荐文章于 2024-07-18 09:48:17 发布