解析XML文件不起作用

时间:2013-03-20 11:54:43

标签: javascript html xml xml-parsing

我正在开发一个应用程序,只需点击一下按钮,该程序就会调用存储在XML文件中的信息,以便使用JavaScript在<span>标记中显示;

    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和解析并不了解什么是错的。你能帮忙吗?

4 个答案:

答案 0 :(得分:2)

使用此方法,因为您只有一个用于文档列表的子节点

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

答案 1 :(得分:2)

注意:

  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");
    }
    
  4. 再添加一个带有id documentList1的span来执行上面的代码

答案 2 :(得分:1)

我认为问题在于:

var xmlhttp = new HttpRequest();

应该是:

var xmlhttp = new XMLHttpRequest();

答案 3 :(得分: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>