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>