【问题标题】:Cannot parse xml data with javascript HTML DOM on local system无法在本地系统上使用 javascript HTML DOM 解析 xml 数据
【发布时间】:2022-02-11 08:10:51
【问题描述】:

我在多个浏览器上尝试了来自 tutorialspoint 网站的示例代码。但是xml数据没有被解析。这两个文件都在我的本地系统上,并且 address.xml 文件位于文件夹“xml”中。

如何从本地系统上的 xml 文件中解析 javascript 中的数据?

这是我来自 tutorialspoint 网站的 HTML 文件 sample.html:

<!DOCTYPE html>
<html>
   <body>
      <h1>TutorialsPoint DOM example </h1>
      <div>
         <b>Name:</b> <span id="name"></span><br>
         <b>Company:</b> <span id="company"></span><br>
         <b>Phone:</b> <span id="phone"></span>
      </div>
      <script>
         if (window.XMLHttpRequest)
         {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
         }
         else
         {// code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
         }
         xmlhttp.open("GET","/xml/address.xml",false);
         xmlhttp.send();
         xmlDoc=xmlhttp.responseXML;

         document.getElementById("name").innerHTML=
         xmlDoc.getElementsByTagName("name")[0].childNodes[0].nodeValue;
         document.getElementById("company").innerHTML=
         xmlDoc.getElementsByTagName("company")[0].childNodes[0].nodeValue;
         document.getElementById("phone").innerHTML=
         xmlDoc.getElementsByTagName("phone")[0].childNodes[0].nodeValue;
      </script>
   </body>
</html>

这是xml数据文件地址.xml:

<?xml version="1.0"?>
<contact-info>
   <name>Tanmay Patil</name>
   <company>TutorialsPoint</company>
   <phone>(011) 123-4567</phone>
</contact-info>

更新:问题在于在本地系统上获得 http 响应。安装XAMPP后就解决了。

【问题讨论】:

  • 您使用的是哪个浏览器?您在哪里阅读 addess.xml?我只看到对 sample.htm 的请求
  • 您是否在浏览器开发者工具控制台中收到任何有用的错误消息?您能否使用浏览器开发者工具网络工具验证 XML 确实被正确发送了
  • 请求是通过 http/https 发出的吗?
  • 我已经在 chrome、firefox、opera 等多种浏览器上尝试过。这两个文件都在我的本地系统上的文件夹“xml”中。
  • 不要做 "/xml/address.xml" ... 使用 "xml/address.xml" ... 但如果你是 not 使用 http 或 https(即您已使用 file:/// 加载文件)

标签: javascript html xml dom


【解决方案1】:

使用如下解析

    if (window.DOMParser)
  {
    parser = new DOMParser();
    xmlDoc = parser.parseFromString(xmlhttp.responseXML, "text/xml");
  }
else // Internet Explorer
  {
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async = false;
    xmlDoc.loadXML(xmlhttp.responseXML);
  }

【讨论】:

    【解决方案2】:

    这个 XML 解析示例,如果变量中有 xml 值。

    Sample = "<contact-info><name>Tanmay Patil</name><company>TutorialsPoint</company><phone>(011) 123-4567</phone></contact-info>";
             
    if (window.DOMParser)
    
    
     {
        parser = new DOMParser();
        xmlDoc = parser.parseFromString(Sample, "text/xml");
      }
    
    document.getElementById("name").innerHTML=
    xmlDoc.getElementsByTagName("name")[0].childNodes[0].nodeValue;
    
    document.getElementById("company").innerHTML=
    xmlDoc.getElementsByTagName("company")[0].childNodes[0].nodeValue;
    
    document.getElementById("phone").innerHTML=
    xmlDoc.getElementsByTagName("phone")[0].childNodes[0].nodeValue;
    
       
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
             <b>Name:</b> <span id="name"></span><br>
             <b>Company:</b> <span id="company"></span><br>
             <b>Phone:</b> <span id="phone"></span>
        

    【讨论】:

    • 变量txt是什么? xml/sample.htm 是什么?它甚至不是有效的javascript!!!这些都与问题无关
    • txt 是一个包含 xml 数据的示例变量。等我更新
    • 我为什么要调试你的答案?
    • @JaromandaX,你不需要调试我的代码。你可以在这里看到直播。
    • 我不在乎,它不能解决问题,你甚至没有通过 XMLHttpRequest 获取 XML .. 这就是问题所在,我几乎可以保证(他们正在使用使用 file:/// 加载的页面 - 这永远不会在 chrome 中工作,除非 xml 文件夹是根目录的子文件夹,否则 /xml/whatever 将找不到)
    【解决方案3】:

    正如 Jaromanda X 在 cmets 中提到的,并且我发现了一个艰难的方法,Chrome 不会使用 DOM 解析器解析本地 xml 文件。但是,如果您直接使用控制台并将 xml 文本保存在那里(作为 var/let 等),您将能够使用 DOM 解析器对其进行解析。

    例如:

    【讨论】:

      猜你喜欢
      • 2011-12-24
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      相关资源
      最近更新 更多