2013-07-24 80 views
0

下面发布的函数是解析XML文件并显示标签名称“employee”。 但是,当我在Web浏览器(Chrome)中加载.HTML文件(其中包括下面发布的函数)时,该函数不会显示变量“x”的内容,我不知道该代码中的错误。用Javascript解析XML文件时出错

请给我一个例子,说明如何显示XML文件的内容。

HTML文件

<html> 
<head> 
<meta content="text/html;charset=utf-8" http-equiv="Content-Type"> 
<meta content="utf-8" http-equiv="encoding"> 
    <link rel="stylesheet" href="readXML.css" type="text/css"> 
    <title>Read First Child</title> 

     <!-- <xml ID="Schriftsteller" SRC="D:\files\files\Schriftsteller.xml"></xml> --> 

      <script language="JavaScript"> 

      var dname = "D:\files\files\xml.xml"; 
       function findWriter() 
       { 
       var xmlDoc; 
        if (window.XMLHttpRequest) 
        { 
         xmlDoc=new window.XMLHttpRequest(); 
         xmlDoc.open("GET",dname,false); 
         xmlDoc.send(""); 
         return xmlDoc.responseXML; 
        } 
       // IE 5 and IE 6 
        else if (ActiveXObject("Microsoft.XMLDOM")) 
        { 
         xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
         xmlDoc.async=false; 
         xmlDoc.load(dname); 
         return xmlDoc; 
        } 
         alert("Error loading document!"); 
         return null; 

       var x, xmlDOC; 

       xmlDoc = loadXMLDoc("D:\files\files\xml.xml"); 
       x = xmlDoc.documentElement.getElementsByTagName("employee"); 
       document.Write(x); 
       } 
      </script> 
    </head> 
    <body onload="loadXMLDoc(dname)"> 
    <span ID="blueBack">Read firstChild</span> 
    <div> 
    <form name="show" 
    <input type=text name="me"> 
    <input type="button" value="Display Writer" 
    onClick="findWriter()"> 
    </form> 
    </div> 

xml.xml

< ?xml version="1.0" encoding="UTF-8" ?> 
<company> 
    <employee id="001" >John</employee> 
    <turnover> 
     <year id="2000">100,000</year> 
     <year id="2001">140,000</year> 
     <year id="2002">200,000</year> 
    </turnover> 
</company> 

回答

0

我觉得你的问题是,你正在试图获得来自员工信息XML。在这里你设置X您应按如下方式更改行:

x = xmlDoc.getElementsByTagName("employee"); 

UPDATE:

我道歉 - 我应该看着更深入你的代码。我发现许多问题/错误,但幸运的是,我最近不得不做一些XML解析,所以我的基础知识,你想要什么如下:

<html> 
    <head> 
     <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> 
     <meta content="utf-8" http-equiv="encoding"> 
     <link rel="stylesheet" href="readXML.css" type="text/css"> 
     <title>Read First Child</title> 

     <!-- <xml ID="Schriftsteller" SRC="D:\files\files\Schriftsteller.xml"></xml> --> 

     <script language="JavaScript"> 

     var dname = "D:\files\files\xml.xml"; 
     var xmlDoc; 
     if (window.XMLHttpRequest) { 
     xmlDoc = new XMLHttpRequest(); 
     } else { 
     // IE 5/6 
     xmlDoc = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     function findWriter() { 
      xmlDoc.open("GET",dname,false); 
      xmlDoc.send(); 
      var xmlResponse = xmlDoc.responseXML; 
      var first = xmlResponse.getElementsByTagName("employee")[0]; 
      var name, id; 
      if(typeof(first.textContent) != 'undefined') 
       name = first.textContent; 
      else if(typeof(first.text) != 'undefined') 
       name = first.text; // IE 
      id = first.getAttribute('id'); 
      //console.log('Employee '+name+', ID '+id); 
      document.write('Employee '+name+', ID '+id+'<br>'); 
      var years = xmlResponse.getElementsByTagName("year"); 
      var year, sales; 
      for(var i=0; i<years.length; i++) { 
       year = years[i].getAttribute('id'); 
       if(typeof(years[i].textContent) != 'undefined') 
        sales = years[i].textContent; 
       else if(typeof(years[i].text) != 'undefined') 
        sales = years[i].text; // IE 
       //console.log('year '+year+' sales='+sales); 
       document.write('year '+year+' sales='+sales+'<br>'); 
      } 
      document.close(); 
     } 
     </script> 
    </head> 
    <body> 
     <span ID="blueBack">Read firstChild</span> 
     <div> 
     <form name="show"> 
      <input type=text name="me"> 
      <input type="button" value="Display Writer" 
       onClick="findWriter()"> 
     </form> 
     </div> 
    </body> 
</html> 

差点忘了:

你的XML样本有一个小错误;更改第一行:

<?xml version="1.0" encoding="UTF-8" ?> 
+0

这也不起作用 –

+0

@Amr Bakri - 我希望我的更新答案有所帮助。在JavaScript中处理XML不是很简单。如果您能够控制数据输入格式,请考虑使用JSON。 :) –

-1

我没有看到很多回调。所以我的猜测是使你的代码更异步可以帮助...但这里是一个教程如何做这样的事情与jQuery(著名的Javascript库,帮助了很多)

http://think2loud.com/224-reading-xml-with-jquery/

+0

为什么投票?它是通过服务器上的webrequest访问和解析文件并且不从网页内部访问文件系统的正确方式。 var dname =“D:\ files \ files \ xml.xml”; < - 不好! – silverfighter

+0

我还没有投你的答案,我甚至不被允许。 –