我的XML的数据是通过geoserver查询返回的,在IE下面和Firefox下面JS解析XMl的方式是不同的,网上的资料不少,但是好多都介绍的不是很详细,下面是我在项目中用到的:(直接贴代码了@)
function get_xml_node(xml,xmlFile)//xml是一个XML的对象,xmlfile是一个xml的字符串
{
var node=new Array();
//IE下解析XML对象
if(window.ActiveXObject)
{
var xmlDoc;
xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
xmlDoc.async = false;
xmlDoc.load(xml);
if(xmlDoc!=null)
{
if(xmlDoc.documentElement.childNodes.length>1)
{
for(var l=0;l<xmlDoc.documentElement.childNodes(1).childNodes[0].childNodes.length;l++){
var nodestr= xmlDoc.documentElement.childNodes(1).childNodes[0].childNodes[l].nodeName;//网上很多都是通过tagname来获取nodevalue的,我的xml是变化的
if(nodestr!=null)
{
var nodename=nodestr.substring(5);//根据结果进行截取所需字符串
node.push(nodename);
}
}
}
else
{
alert("所选区域没有该类型的物体!");
}
}
}
//Firefox或其他浏览器解析xml的string字符串
else if (document.implementation && document.implementation.createDocument)
{
var fxmlDoc;
fxmlDoc = document.implementation.createDocument('', '', null);//创建一个空的其他浏览器厂商的xmlDoc对象(FF,Opera)
fxmlDoc.async = false;
//Firefox下没有load方法,所以加载XML方法是:将string用DOM方法实现
domParser = new DOMParser();
fxmlDoc = domParser.parseFromString(xmlFile, 'text/xml');
if(fxmlDoc!=null)
{
if(fxmlDoc.documentElement.childNodes.length>1)
{
if(fxmlDoc.documentElement.childNodes[1].hasChildNodes())
{
for(var l=0;l<fxmlDoc.documentElement.childNodes[1].childNodes[0].childNodes.length;l++){
var nodestr= fxmlDoc.documentElement.childNodes[1].childNodes[0].childNodes[l].nodeName;//获取XML下一个完整节点,即:图层属性字段
if(nodestr!=null)
{
var nodename=nodestr.substring(5);//根据结果进行截取所需字符串
node.push(nodename);
}
}
}
}
else
{
alert("所选区域没有该类型的物体!");
}
}
}
else
{
return null;
}
return node;
}
//自己留着以备后用