进行解析JSON是基于DOM的,对HTML的DOM熟悉的话,解析XML就没什么困难了。注意:在Firefox中,解析器不会忽略空格,所以元素间的空格,FF一样会认为是一个节点。不过在我们用程序拼接XML的时候,一般不会出现节点间有空格的情况。#t#
在根目录下添加一个新的一般处理程序(GetXml.ashx),代码如下:
- <input type="button" value="GetXml" onclick="getXml();" />
在Default.aspx页面添加以下脚本:
- GetXml.ashx
注意到代码段解析JSON;主要是为了消除IE6和其他浏览器的兼容问题,在其他浏览器下,允许request.responseXML.getElementsByTagName("Person");添加测试按钮:
- function getXml() {
- // 在IE7下测试通过,IE6下必须创建 new ActiveXObject("MSXML2.XMLHTTP.6.0")
- var request = new XMLHttpRequest();
- request.open('GET', 'GetXml.ashx');
- request.onreadystatechange = function() {
- if (request.readyState == 4 && request.status == 200) {
- var xmlDoc = request.responseXML;
- var root = xmlDoc.documentElement;
- var elements = root.getElementsByTagName("Person");
- alert(elements.length); // 2
- // elements[0].firstChild 引用到***个Person节点的Id节点
- // elements[0].firstChild.firstChild 引用到Id节点的文本节点
- // 因为文本节点是元素节点的***个子节点
- alert(elements[0].firstChild.firstChild.nodeValue); // 1
- alert(elements[1].lastChild.firstChild.nodeValue); // 'n_2'
- }
- }
- request.send(null);
- }
从代码上很容易看出,解析JSON相对直观,在网络中需要传输的字符串也比较少,解析过程中也不需要考虑浏览器兼容问题,但JSON比较适合轻量级的数据交互,XML则比JSON多了一些特性,比如命名空间,还有更多的节点类型。