您的位置:首页 > Web前端 > JavaScript

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

2017-10-11 19:30 411 查看
问题描述:

对指定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]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息