2012-09-29 36 views
0

我试图显示特定标记的所有节点,到目前为止它没有过滤我想要的数据但只有一个节点出现。有人可以帮我吗?将多个XML节点显示为HTML

这里的XML:

<?xml version="1.0" encoding="UTF-8"?> 
<USA> 
<NY> 
    <Cell>NY Store 1</Cell> 
    <Cell>NY Store 2</Cell> 
    <Cell>NY Store 3</Cell> 
</NY> 
<CA> 
    <Cell>CA Store 1</Cell> 
    <Cell>CA Store 2</Cell> 
    <Cell>CA Store 3</Cell> 
</CA> 
</USA> 

这里的脚本:

<script> 
function loadXMLDoc() 
{ 
    var xmlhttp; 
    var txt,x,i; 
    if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    xmlDoc=xmlhttp.responseXML; 
    txt=""; 
    x=xmlDoc.getElementsByTagName("CA"); 
    for (i=0;i<x.length;i++) 
    { 
    xx=x[i].getElementsByTagName("Cell"); 
    } 
    try 
    { 
    txt=txt + xx[0].childNodes[0].nodeValue + "<br />"; 
    } 
    catch (er) 
    { 
    } 
    document.getElementById("result").innerHTML=txt; 
    } 
    } 
    xmlhttp.open("GET","stores.xml",true); 
    xmlhttp.send(); 
} 
</script> 

和这里的HTML:

<button type="button" onclick="loadXMLDoc()">California</button> 
<div id="result">Please select your state</div> 

正如我所说的,它的话很好,但其只显示加州之下的一个元素。有任何想法吗?先谢谢了!

回答

0

xx也是一个数组,所以你需要在x循环内部有另一个循环。

尝试捕获需要在此循环内。

我不是很擅长JavaScript,但是如果你的语法是正确的。所以,我认为这可能工作(虽然我没有测试它):

for (i=0;i<x.length;i++) 
{ 
    xx=x[i].getElementsByTagName("Cell"); 
    for(j=0;j<xx.length;j++) { 
     try { 
      txt=txt + xx[j].childNodes[0].nodeValue + "<br />"; 
     } 
     catch(er) { 

     } 
    } 
} 

document.getElementById("result").innerHTML=txt; 
+0

它工作!非常感谢你cfreak!你是个天才!!! – Ken