•   欢迎来到21NN网.
  •   请记住本站网址www.21nn.cn

JS剖析XML文件和XML字符串详解【XML教程】,XML文件 XML字符串

摘要: JS剖析XML文件<scripttype='text/javascript'>loadXML=function(xmlFile){varxmlDoc=null;...
JS剖析XML文件

<script type='text/javascript'>
loadXML = function(xmlFile){
var xmlDoc=null;
//推断浏览器的范例
//支撑IE浏览器
if(!window.DOMParser && window.ActiveXObject){
var xmlDomVersions = ['MSXML.2.DOMDocument.6.0','MSXML.2.DOMDocument.3.0','Microsoft.XMLDOM'];
for(var i=0;i<xmlDomVersions.length;i++){
try{
xmlDoc = new ActiveXObject(xmlDomVersions[i]);
break;
}catch(e){
}
}
}
//支撑Mozilla浏览器
else if(document.implementation && document.implementation.createDocument){
try{
/* document.implementation.createDocument('','',null); 要领的三个参数申明
* 第一个参数是包括文档所运用的定名空间URI的字符串;
* 第二个参数是包括文档根元素称号的字符串;
* 第三个参数是要建立的文档范例(也称为doctype)
*/
xmlDoc = document.implementation.createDocument('','',null);
}catch(e){
}
}
else{
return null;
}
if(xmlDoc!=null){
xmlDoc.async = false;
xmlDoc.load(xmlFile);
}
return xmlDoc;
}
</script>

JS剖析XML字符串

<script type='text/javascript'>
loadXML = function(xmlString){
var xmlDoc=null;
//推断浏览器的范例
//支撑IE浏览器
if(!window.DOMParser && window.ActiveXObject){ //window.DOMParser 推断是不是黑白ie浏览器
var xmlDomVersions = ['MSXML.2.DOMDocument.6.0','MSXML.2.DOMDocument.3.0','Microsoft.XMLDOM'];
for(var i=0;i<xmlDomVersions.length;i++){
try{
xmlDoc = new ActiveXObject(xmlDomVersions[i]);
xmlDoc.async = false;
xmlDoc.loadXML(xmlString); //loadXML要领载入xml字符串
break;
}catch(e){
}
}
}
//支撑Mozilla浏览器
else if(window.DOMParser && document.implementation && document.implementation.createDocument){
try{
/* DOMParser 对象剖析 XML 文本并返回一个 XML Document 对象。
* 要运用 DOMParser,运用不带参数的组织函数来实例化它,然后挪用其 parseFromString() 要领
* parseFromString(text, contentType) 参数text:要剖析的 XML 标记 参数contentType文本的内容范例
* 多是 "text/xml" 、"application/xml" 或 "application/xhtml+xml" 中的一个。注重,不支撑 "text/html"。
*/
domParser = new DOMParser();
xmlDoc = domParser.parseFromString(xmlString, 'text/xml');
}catch(e){
}
}
else{
return null;
}
return xmlDoc;
}
</script>

测试XML

<?xml version="1.0" encoding="utf-8" ?>
<DongFang>
<Company>
<cNname>1</cNname>
<cIP>1</cIP>
</Company>
<Company>
<cNname>2</cNname>
<cIP>2</cIP>
</Company>
<Company>
<cNname>3</cNname>
<cIP>3</cIP>
</Company>
<Company>
<cNname>4</cNname>
<cIP>4</cIP>
</Company>
<Company>
<cNname>5</cNname>
<cIP>5</cIP>
</Company>
<Company>
<cNname>6</cNname>
<cIP>6</cIP>
</Company>
</DongFang>

运用要领

var xmldoc=loadXML(text.xml)
var elements = xmlDoc.getElementsByTagName("Company");
for (var i = 0; i < elements.length; i++) {
var name = elements[i].getElementsByTagName("cNname")[0].firstChild.nodeValue;
var ip = elements[i].getElementsByTagName("cIP")[0].firstChild.nodeValue;
}

以上要领合适IE,下面我们来讨论下IE和火狐浏览器下剖析XML的题目

离别针对ie和火狐离别作了对xml文档和xml字符串的剖析,一切代码都解释掉了,想看哪部份功用,
去掉解释就能够了。

至于在ajax环境下剖析xml,实在道理是一样的,只不过放在了ajax里,照样要对返回的xml举行剖析。

<script> 
//剖析xml文档///////////////////////////////////////////////////// 
var xmlDoc=null; 
 
//支撑IE浏览器 
if(window.ActiveXObject){ 
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");  
} 
//支撑Mozilla浏览器 
else if(document.implementation && document.implementation.createDocument){ 
  xmlDoc = document.implementation.createDocument('','',null); 
} 
else{ 
 alert("here"); 
} 
if(xmlDoc!=null){ 
  xmlDoc.async = false; 
  xmlDoc.load("house.xml"); 
} 
 
//ie和火狐不仅剖析器不一样,剖析历程也不一样。以下; 
//ie剖析xml文档 
//alert(xmlDoc.getElementsByTagName("address")[0].childNodes[0].childNodes[0].childNodes[0].nodeValue);//弹出150万 
//alert(xmlDoc.getElementsByTagName("address")[0].childNodes[0].childNodes[1].childNodes[0].nodeValue);//弹出一室三居 
 
//层层遍历剖析childNodes[1] 
//alert(xmlDoc.childNodes[1].childNodes[1].childNodes[0].childNodes[0].nodeValue);//弹出200万 
//alert(xmlDoc.childNodes[1].childNodes[0].childNodes[0].childNodes[0].nodeValue);//弹出150万 
//alert(xmlDoc.childNodes[1].childNodes[0].childNodes[1].childNodes[0].nodeValue);//弹出一室三居 
 
//还可以用item(i)举行遍历 
//var nodes=xmlDoc.documentElement.childNodes; 
//alert(nodes.item(0).childNodes.item(0).childNodes.item(0).text); //弹出150万 
//alert(nodes.item(0).childNodes.item(1).childNodes.item(0).text); //弹出一室三居 
 
//火狐剖析xml文档 
//火狐浏览器和ie剖析xml不一样节点的值用textContent。 
//而且他会在有的条理child节点前后都加上"\n"换行符。(这个搞不清楚为何,用firebug调试的时刻就是这个模样,所以写过的代码最好测试一下,换个环境就不对了) 
//也就是说第1个节点是"\n",第2个节点才是真正的第一个节点。 
//第3个节点是"\n",第4个节点才是真正的第二个节点。 
//层层猎取剖析childNodes[0] 
//alert(xmlDoc.childNodes[0].childNodes[1].childNodes[1].textContent);//弹出150万 
//alert(xmlDoc.childNodes[0].childNodes[1].childNodes[3].textContent);//弹出一室三居 
 
//直接猎取节点名剖析getElementsByTagName("address") 
//alert(xmlDoc.getElementsByTagName("address")[0].textContent);//弹出150万 一室三居 200万 300万 
//alert(xmlDoc.getElementsByTagName("address")[0].childNodes[1].textContent);//弹出150万 一室三居 
//alert(xmlDoc.getElementsByTagName("address")[0].childNodes[1].childNodes[1].textContent);//弹出150万 
//alert(xmlDoc.getElementsByTagName("address")[0].childNodes[1].childNodes[3].textContent);//弹出一室三居 
//alert(xmlDoc.getElementsByTagName("address")[0].childNodes[3].textContent);//弹出200万  
 
//火狐也可以用item(1)函数遍历,注重也是有的条理节点前后都加了节点"\n"。 
//第一个节点是item(1),第二个节点是item(3),第三个节点是item(5) 
//item(1)函数遍历剖析 
//var nodes=xmlDoc.documentElement.childNodes; 
//alert(nodes.item(1).textContent); //弹出150万 一室三居 
//alert(nodes.item(1).childNodes.item(1).textContent); //弹出150万  
//alert(nodes.item(1).childNodes.item(3).textContent); //一室三居  
 
//剖析xml字符串///////////////////////////////////////////////////////////////////////// 
var str="<car>"+ 
"<brand><price>50万</price><pattern>A6</pattern></brand>"+ 
"<brand><price>65万</price><pattern>A8</pattern></brand>"+ 
"<brand><price>17万</price></brand>"+ 
"</car>"; 
  
//跨浏览器,ie和火狐剖析xml运用的剖析器是不一样的。 
var xmlStrDoc=null; 
if (window.DOMParser){// Mozilla Explorer 
 parser=new DOMParser(); 
 xmlStrDoc=parser.parseFromString(str,"text/xml"); 
}else{// Internet Explorer 
 xmlStrDoc=new ActiveXObject("Microsoft.XMLDOM"); 
 xmlStrDoc.async="false"; 
 xmlStrDoc.loadXML(str); 
} 
 
//ie剖析xml字符串 
//alert(xmlStrDoc.getElementsByTagName("car")[0].childNodes[0].childNodes[0].childNodes[0].nodeValue);//弹出50万 
//alert(xmlStrDoc.getElementsByTagName("car")[0].childNodes[0].childNodes[1].childNodes[0].nodeValue);//弹出A6 
  
//还可以用item(i)举行遍历 
//var strNodes=xmlStrDoc.documentElement.childNodes; 
//alert(strNodes.item(0).childNodes.item(0).childNodes.item(0).text); //弹出50万 
//alert(strNodes.item(0).childNodes.item(1).childNodes.item(0).text); //弹出A6 
  
//火狐剖析xml字符串 
//火狐浏览器和ie剖析xml不一样节点的值用textContent。 
//而且他会在有的条理child节点前后都加上"\n"换行符。 
//也就是说第1个节点是"\n",第2个节点才是真正的第一个节点。 
//第3个节点是"\n",第4个节点才是真正的第二个节点。 
//alert(xmlStrDoc.childNodes[0].childNodes[1].textContent);//弹出65万 A8 
//alert(xmlStrDoc.childNodes[0].childNodes[1].childNodes[1].textContent);//A8 
//alert(xmlStrDoc.childNodes[0].childNodes[1].childNodes[0].textContent);//弹出65万 
  
//火狐也可以用item(1)函数遍历,注重也是有的条理节点前后都加了节点"\n"。 
//第一个节点是item(1),第二个节点是item(3),第三个节点是item(5) 
//var nodes=xmlStrDoc.documentElement.childNodes; 
//alert(nodes.item(1).textContent); //弹出65万 A8 
//alert(nodes.item(1).childNodes.item(0).textContent); //弹出65万  
//alert(nodes.item(1).childNodes.item(1).textContent); //弹出A8  
  
</script>

个中xml每一个节点地点条理是最烦人的题目,只能一次次去试,只需出来一个准确的,
就很好肯定节点的条理关系了,或许debug一下。
觉得这方面json照样更好浏览和明白。这个剖析太费力了!

文档house.xml内容以下:

<?xml version="1.0" encoding="utf-8" ?>  
<address> 
  <city name="北京"> 
    <price>150万</price> 
    <type>一室三居</type> 
  </city> 
  <city name="上海"> 
    <price>200万 </price> 
  </city> 
  <city name="杭州"> 
    <price>230万</price> 
  </city> 
  <city name="南京"></city> 
</address>


更多JS剖析XML文件和XML字符串详解相干文章请关注ki4网!

分享到:

发表评论

评论列表

还没有评论,快来说点什么吧~

公众号二维码

微信公众号