欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JS解析XML文件(跨浏览器)

程序员文章站 2024-03-26 12:54:35
...

问题描述:

对指定xml文件进行解析,并显示解析出的内容。(给一个指定ip查询是否在xml文件中的ip范围内)

xml文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<AzurePublicIpAddresses xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Region Name="europewest">
    <IpRange Subnet="40.112.124.0/24" />
    <IpRange Subnet="65.52.128.0/19" />
    <IpRange Subnet="94.245.97.0/24" />
    <IpRange Subnet="104.47.169.0/24" />
    <IpRange Subnet="104.214.240.0/24" />
    <IpRange Subnet="137.116.192.0/19" />
    <IpRange Subnet="168.63.0.0/19" />
    <IpRange Subnet="168.63.96.0/20" />
  </Region>
</AzurePublicIpAddresses>

JS代码:

function loadXMLDoc(dname) 
{
	try //Internet Explorer
	  {
		xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async=false;
		xmlDoc.load(dname);
	  }
	catch(e)
	  {
	  try //Firefox, Mozilla, Opera, etc.
	    {
		  xmlDoc=document.implementation.createDocument("","",null);
		  xmlDoc.async=false;
		  xmlDoc.load(dname);
	    }
	  catch(e) {//chrome
				  try {
					var xmlhttp=new window.XMLHttpRequest();
					xmlhttp.open("GET",dname,false);
					xmlhttp.send(null);
					xmlDoc=xmlhttp.responseXML.documentElement;
				}
				  catch(e){alert("error")}
	  		}
	  }
	
	return xmlDoc;
}

function Cloud_Platform(ip)
{
	var answer="非云平台";
	xmlDoc=loadXMLDoc('../../assets/ip_range/Azure_ip-ranges.xml');
	x=xmlDoc.getElementsByTagName('Region');
	for (i=0;i<x.length;i++)
	{
		var region=x[i].getAttribute("Name");
		item=x[i].getElementsByTagName('IpRange');
		for(j=0; j<item.length; j++)
			{
				ip_range=item[j].getAttribute("Subnet");
				if(Get_IP_Range(ip_range, ip)==true)
					{
						answer=region+" Azure";
						document.getElementById("ip_location").innerText=answer
					}
			}
	}
}

function Get_IP_Range(ip_cidr, ip)//eg:172.10.10.0/15 172.10
{
	var endip=['255', '255', '255', '255'];
	var mid=ip_cidr.split('/');
	var net=mid[0];//eg:172.10.10.0
	var mask=parseInt(mid[1]);//eg:15
	var ipsplit=net.split('.');
	if(mask%8==0)
		{
			for(var i=0; i<(mask/8); i++)
				endip[i]=ipsplit[i];
		}
	else{
		for(var i=0; i<Math.floor((mask/8)); i++)
			endip[i]=ipsplit[i];
		endip[Math.floor(mask/8)]=""+(parseInt(ipsplit[Math.floor(mask/8)])+Math.pow(2,(8-mask%8-1)));
	}
	var aaa=ipToInt(ip.split('.'));
	var bbb=ipToInt(ipsplit);
	var ccc=ipToInt(endip);
	if( aaa>=bbb  && aaa<=ccc)
		return true;
	else return false;
}

function ipToInt(IP){
	return parseInt(IP[0])*256*256*256+parseInt(IP[1])*256*256+parseInt(IP[2])*256+parseInt(IP[3]);
}
JS解析XML文件(跨浏览器)