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

问题描述:

对指定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]);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值