问题描述:
对指定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代码:</Region> </AzurePublicIpAddresses>
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]); }