JS操作XmlDocument 兼容操作 nsIDOMXPathEvaluator.createNS

分类:Javascript| 发布:camnprbubuol| 查看:1619 | 发表时间:2010/12/29





javascript在读取xml文档,并解析时,存在浏览器不兼容现象,下边就来看一下会出现什么错误,以及解决兼容的问题。(重点兼容FF)

1[Exception... "Not enough arguments [nsIDOMWindowInternal.alert]"  nsresult: "0x80570001 (NS_ERROR_XPC_NOT_ENOUGH_ARGS)"  location: "JS frame :: {$->>repath}WebUi/3Linkage/Area.js :: anonymous :: line 93"  data: no]


---------------------------------------------------------------------------------------

1alert(this.xmlDoc.selectSingleNode("address").childNodes);
2 
3TypeError: this.xmlDoc.selectSingleNode is not a function

----------------------------------------------------------------------------------------


01SelectSingleNode: function (xmlDoc, elementPath) {
02        if (window.ActiveXObject) {
03            return xmlDoc.selectSingleNode(elementPath);
04        }
05        else {
06            var xpe = new XPathEvaluator();
07            var nsResolver = xpe.createNSResolver(xmlDoc.ownerDocument == null ? xmlDoc.documentElement : xmlDoc.ownerDocument.documentElement);//报下边的错误
08            var results = xpe.evaluate(elementPath, xmlDoc, nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
09            return results.singleNodeValue;
10        }
11}


1[Exception... "Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIDOMXPathEvaluator.createNSResolver]"  nsresult: "0x80070057 (NS_ERROR_ILLEGAL_VALUE)"  location: "JS frame :: http://192.168.2.10/WebUi/3Linkage/Area.js :: anonymous :: line 80"  data: no]





01if (!window.ActiveXObject) {
02 
03    Camnpr.ProvinceCityCountry.prototype.selectNodes = function (sXPath) {
04 
05        var oEvaluator = new XPathEvaluator();
06 
07        var oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
08 
09        var aNodes = new Array();
10 
11        if (oResult != null) {
12 
13            var oElement = oResult.iterateNext();
14 
15            while (oElement) {
16 
17                aNodes.push(oElement);
18 
19                oElement = oResult.iterateNext();
20 
21            }
22 
23        }
24 
25        return aNodes;
26 
27    }
28 
29    Camnpr.ProvinceCityCountry.prototype.selectSingleNode = function (sXPath) {
30 
31        var oEvaluator = new XPathEvaluator();
32 
33        // FIRST_ORDERED_NODE_TYPE returns the first match to the xpath.
34 
35        var oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
36 
37        if (oResult != null) {
38 
39            return oResult.singleNodeValue;
40 
41        } else {
42 
43            return null;
44 
45        }
46 
47    }
48 
49}

01//判断浏览器类型
02    if (window.ActiveXObject) {    //在IE浏览器环境下
03        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
04        xmlDoc.async = "false";
05        xmlDoc.load(XMLPath);
06        xmlNodes = xmlDoc.selectSingleNode("root").childNodes;
07 
08        for (var i = 0; i < xmlNodes.length; i++) {
09            var provinceNode = xmlNodes[i].getAttribute("name");
10            var pOption = document.createElement("option");
11            pOption.value = provinceNode;
12            pOption.text = provinceNode;
13            provinceDropDownList.add(pOption);
14        }
15 
16        InitCity();
17    }
18    else if (document.implementation && document.implementation.createDocument) {        //在非IE浏览器环境下
19        xmlDoc = document.implementation.createDocument("", "", null);
20        xmlDoc.load(XMLPath);
21        xmlDoc.async = false;
22 
23        xmlDoc.onload = function () {
24            xmlNodes = xmlDoc.getElementsByTagName("province");
25 
26            for (var i = 0; i < xmlNodes.length; i++) {
27                var provinceNode = xmlNodes[i].getAttribute("name");
28                var pOption = document.createElement("option");
29                pOption.innerHTML = provinceNode;
30                pOption.setAttribute("value", provinceNode);
31                provinceDropDownList.appendChild(pOption);
32            }
33 
34            /* 初始化下级列表的过程必须放在
35            * XML文件的装载事件中,否则在初始化下
36            * 级列表的函数中无法获取上级列表的值
37            */
38            InitCity();
39        }
40    }
365据说看到好文章不转的人,服务器容易宕机
原创文章如转载,请注明:转载自郑州网建-前端开发 http://camnpr.com/
本文链接:http://camnpr.com/javascript/151.html