4.23. 解析 XML

Firefox 自动将当前页面解析为 DOM,但是您也可以手动创建 DOM 而不使用任何 XML 字符串,可以是您自己建立的,也可以是您从远端主机得到的 XML

例 4.27. 将任意字符串解析为 XML

var xmlString = '<passwd>' + 
	'  <user id="101">' +
	'    <login>mark</login>' + 
	'    <group id="100"/>' +
	'    <displayname>Mark Pilgrim</displayname>' + 
	'    <homedir>/home/mark/</homedir>' +
	'    <shell>/bin/bash</shell>' +
	'  </user>' +
	'</passwd>'
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlString, "application/xml");

这里关键的地方是 DOMParser 对象,有个 parseFromString 方法。(它也有其他的方法,但在这里我们用不到。)parseFromString 方法有两个参数:解析用的 XML 字符串,和内容类型。两者都是必需的。

[注意]

DOMParserparseFromString 方法将内容的类型作为它的第二个参数。这个方法可以接受 application/xml, application/xhtml+xmltext/xml。由于深究起来,理由会很荒唐,您应该始终使用 application/xml

这个模式非常强大,如果把它与 GM_xmlhttpRequest 函数结合起来解析远程源的 XML

例 4.28. 解析远程源的 XML

GM_xmlhttpRequest({
	method: 'GET',
	url: 'http://greaseblog.blogspot.com/atom.xml',
	headers: {
	'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey/0.3',
	'Accept': 'application/atom+xml,application/xml,text/xml',
	},
	onload: function(responseDetails) {
		var parser = new DOMParser();
		var dom = parser.parseFromString(responseDetails.responseText,
		"application/xml");
		var entries = dom.getElementsByTagName('entry');
		var title;
		for (var i = 0; i < entries.length; i++) {
		title = entries[i].getElementsByTagName('title')[0].textContent;
		alert(title);
		}
	}
});

这段代码会载入http://greaseblog.blogspot.com/atom.xml的 Atom feed,把它解析为 DOM,然后查询 DOM 得到条目列表。再对每个条目做 DOM 查询,获得条目的标题(title),然后在对话框中显示出来。

← 覆盖内建的 Javascript 方法
实例教学 →