javascript加载xml文件,兼容Chrome

金嘉
2023-12-01

      JavaScript加载xml文件兼容Chrome浏览器;Chrome浏览器没有实现XMLdocument.load方法,你可以换成XmlHttpRequest,

下面是一段实例代码 :

<script type="text/javascript">
    function parseXml(fileName)
    {
     try{//Internet Explorer  
     xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
     xmlDoc.async = "false";
            //加载 XML文档,获取XML文档对象
            xmlDoc.load(fileName);
     }catch(e){//Firefox, Mozilla, Opera, etc.  
     try{
     xmlDoc=document.implementation.createDocument("","",null);
     xmlDoc.async = "false";
                //加载 XML文档,获取XML文档对象
                xmlDoc.load(fileName);
     }catch(e){
     try{//Google Chrome  
     var xmlhttp=new window.XMLHttpRequest();
         xmlhttp.open("get",fileName,false);
         xmlhttp.send(null);
         xmlDoc=xmlhttp.responseXML.documentElement;
     }catch(e){
     alert("您的浏览器不能正常加载文件。请切换到兼容模式,或者更换浏览器");
     }
     }
     }
     return xmlDoc;   
}
//兼容IE、FireFox、Chrome等浏览器的xml处理函数(selectSingleNode、   
  selectNodes);selectSingleNode:根据XPath选择单个节点。selectNodes:根据XPath选择多个节点。
 window.οnlοad=function()
    {
        var provinceNode=document.getElementById('province');//获取省节点
        provinceNode.οnchange=function()//节点改变时调用该函数
        {
            //清除city节点的所有子节点(除第一个节点)
            var cityNode=document.getElementById('city');
            var cityNodeOptions=cityNode.getElementsByTagName('option');
            var len=cityNodeOptions.length;
            for(var i=1;i<len;i++)
            {
          //每次都清除第2个,因为数组cityNodeOptions的长度是动态变化的
                cityNode.removeChild(cityNodeOptions[1]);    
            }
            var provinceVal=this.value;
            if(provinceVal==null){
                return false;
                }
            //加载city.xml文件
            var xmlDoc=parseXml('cities.xml');
            // 重写方法。为了兼容FireFox、Chrome。
            if(!window.ActiveXObject) {
             XMLDocument.prototype.selectSingleNode=
             Element.prototype.selectSingleNode = function (xpath)
              {
                    var  x = this.selectNodes(xpath)
                    if ( ! x || x.length < 1 ) return   null ;
                    return  x[ 0 ];
                }
   XMLDocument.prototype.selectNodes=Element.prototype. selectNodes =
   function (xpath)
    {
          var  xpe  =   new  XPathEvaluator();
          var nsResolver=xpe.createNSResolver( this.ownerDocument     
          ==null?this.documentElement :this.ownerDocument.documentElement);
          var  result  =  xpe.evaluate(xpath,  this , nsResolver,  0 ,  null );
          var  found  =  [];
          var  res;
          while  (res  =  result.iterateNext())
               found.push(res);
               return  found;
          }
  }
            //使用XPATH技术,在xml中查找匹配的province节点
            var provinceEles = xmlDoc.selectNodes("//province[@name='"
                                                   + provinceVal + "']");
            var cityNodes=provinceEles[0].getElementsByTagName('city');
            //遍历city,得到每个文本值,创建新的节点并添加
            for(var i=0;i<cityNodes.length;i++){
                var text=cityNodes[i].firstChild.nodeValue;
                var addNodeOption=document.createElement('option');
                var addNodeText=document.createTextNode(text);
                addNodeOption.appendChild(addNodeText);
                //将新节点挂载到city节点下
                cityNode.appendChild(addNodeOption);
              }
            }
        }
   </script>


 类似资料: