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" />
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]);
}
对指定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文件实例
- JS实现的跨浏览器解析XML文件实例
- (转)js解析浏览器类型及版本js代码
- IE、FireFox、Opera全兼容的JS解析XML文件实现省、市、县(区)三级联动效果
- JavaScript:全面解析各种浏览器网页中的JS代码的执行顺序
- 深入彻底理解原生js的作用域、作用域链(以及浏览器是怎样解析js代码的)
- 又一利用IE的JS解析bug区分浏览器类型的代码
- js解析xml的浏览器兼容
- js解析xml文件,实现省市区三级联动
- js解析一个XML字符串 - 跨浏览器的实例
- 一个小型浏览器架构:HTTP通讯、COOKIE处理、HTML解析、JS模拟、表单处理
- 跨浏览器解析XML文件(二)
- [HTML]js读取XML文件并解析
- JavaScript 全面解析各种浏览器网页中的JS 执行顺序
- Ajax实现xml文件数据插入数据库(一)--- 构建解析xml文件的js库
- js读取xml文件,解决浏览器兼容问题
- JS解析XML文件和字符串的跨浏览器实现
- 跨浏览器的解析xml文件的函数
- 另类跨浏览器解析XML文件的方法
- JS实现兼容各浏览器解析XML文档数据的方法