2013-03-20 96 views
1

我正在开发一个应用程序,点击按钮时,程序调用存储在XML文件中的信息,以使用JavaScript在<span>标记中显示;解析XML文件不起作用

function viewXMLFiles() { 

     console.log("viewXMLFiles() is running"); 

     var xmlhttp = new HttpRequest(); 
      xmlhttp.open("GET", "TestInfo.xml", false); 
      xmlhttp.send; 

     console.log("still running"); 

     var xmlDoc = xmlhttp.responseXML; 

     console.log("getting tired"); 

     document.getElementById("documentList").innerHTML = xmlDoc.getElementByTagName("documentList")[0].childNodes[0].nodeValue; 
     document.getElementById("documentList").innerHTML = xmlDoc.getElementByTagName("documentList")[1].childNodes[1].nodeValue; 

     console.log("done"); 
    } 

然后调用它的HTML是(以及将显示XML文件的位置);

<button onclick = "viewXMLFiles();">View Document Info</button><br> 

<span id = "documentList"> 
    <!--This is where the XML will be loaded into--> 
</span> 

该XML文件是;

<document_list> 

<document> 

    <document_name>Holidays.pdf</document_name> 

    <file_type>.pdf</file_type> 

    <file_location></file_location> 

</document> 

<document> 

    <document_name>iPhone.jsNotes.docx</document_name> 

    <file_type>.docx</file_type> 

    <file_location></file_location> 

</document> 

</document_list> 

在控制台中,出现第一条消息,但没有任何反应,这就是所有的结果。但我真的(如,真的新)到XML和解析,并不明白是什么错。你能帮忙吗?

+1

您是否尝试过使用XMLHttpRequest? – Marek 2013-03-20 11:58:15

+0

我说'新的HttpRequest'? – 2013-03-20 11:59:17

+0

好吧我试过了,现在它打破了'document.getElementById'行 – 2013-03-20 12:00:39

回答

0

如果你想显示每个文档的信息,你会想这样的事情:

<html> 
<head> 

<script type="text/javascript"> 
function getMyXML() { 

    console.log("viewXMLFiles() is running"); 

    xmlhttp = new XMLHttpRequest(); 
    xmlhttp.open("GET","TestInfo.xml",false); 
    xmlhttp.send(); 
    xmlDoc = xmlhttp.responseXML; 

    console.log("still running"); 

    console.log("getting tired"); 

    document.getElementById("docname").innerHTML = xmlDoc.getElementsByTagName("document_name")[0].childNodes[0].nodeValue; 
    document.getElementById("filetype").innerHTML = xmlDoc.getElementsByTagName("file_type")[0].childNodes[0].nodeValue; 

    document.getElementById("docname2").innerHTML = xmlDoc.getElementsByTagName("document_name")[1].childNodes[0].nodeValue; 
    document.getElementById("filetype2").innerHTML = xmlDoc.getElementsByTagName("file_type")[1].childNodes[0].nodeValue; 

    console.log("done"); 
} 
</script> 
</head> 
<body> 

<input type="button" onclick="getMyXML();" value="Get XML" /> 

<div id="doclist"> 
<h2>Document 1</h2> 
<label>Docname: </label><span id="docname"></span><br/> 
<label>Filetype: </label><span id="filetype"></span><br/> 

</div> 

<div id="doclist"> 
<h2>Document 2</h2> 
<label>Docname: </label><span id="docname2"></span><br/> 
<label>Filetype: </label><span id="filetype2"></span><br/> 
</div> 

</body> 
1

我认为这个问题是:

var xmlhttp = new HttpRequest(); 

它应该是:

var xmlhttp = new XMLHttpRequest(); 
+0

好,非常感谢 - 这很有效,但现在JavaScript的最后两行有问题:S你能看到一个问题吗? – 2013-03-20 12:02:36

2

使用这都是因为你的documentlist

document.getElementById("documentList").innerHTML = xmlDoc.getElementByTagName("documentList")[0].childNodes[0].nodeValue; 
document.getElementById("documentList").innerHTML = xmlDoc.getElementByTagName("documentList")[1].childNodes[0].nodeValue; 
+0

我试过了,它没有改变任何东西 – 2013-03-20 12:05:36

+0

你得到了什么......?它只读Holidays.pdf .. ?? – 2013-03-20 12:06:50

+0

我在声明'xmlDoc'时做了错误吗? – 2013-03-20 12:07:29

2

注只有一个childnode:

  1. 使用的getElementsByTagName
  2. 有一个在你的XML没有documentList标签
  3. 标签文件是在XML中唯一阵列不document_list

    function viewXMLFiles() { 
    
        console.log("viewXMLFiles() is running"); 
    
        xmlhttp = new XMLHttpRequest(); 
        xmlhttp.open("GET","TestInfo.xml",false); 
        xmlhttp.send(); 
        xmlDoc = xmlhttp.responseXML; 
    
        console.log("still running"); 
    
    
        var getData = xmlDoc.getElementsByTagName("document"); 
        console.log("getting tired"); 
    
        document.getElementById("documentList").innerHTML = getData[0].getElementsByTagName("document_name")[0].childNodes[0].nodeValue; 
        document.getElementById("documentList1").innerHTML = getData[1].getElementsByTagName("document_name")[0].childNodes[0].nodeValue; 
    
        console.log("done"); 
    } 
    

再添加一个跨度ID documentList1执行上面的代码

+0

好的,谢谢很多,这是有效的,但我正在寻找它来显示XML文件中的所有内容。我需要重复'document.getElementById(“documentList”)。innerHTML = getData [0] .getElementsByTagName(“document_name”)[0] .childNodes [0] .nodeValue; document.getElementById(“documentList1”)。innerHTML = getData [1]。getElementsByTagName(“document_name”)[0] .childNodes [0] .nodeValue;'文件中其他标记的行数? – 2013-03-20 12:29:14

+0

是的,你应该重复文件中的每个标签 – 2013-03-20 12:35:57

+0

你应该重复标签document_name,file_type和file_location,但你可以使用for循环来获取文档标签下的元素..我的意思是循环代替getData [0],getData [1] ....等 – 2013-03-20 12:39:08