Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Chrome中使用JavaScript读取XML文件_Javascript_Xml_Xmldom - Fatal编程技术网

在Chrome中使用JavaScript读取XML文件

在Chrome中使用JavaScript读取XML文件,javascript,xml,xmldom,Javascript,Xml,Xmldom,我需要使用JavaScript加载和读取XML文件 以下代码在Firefox、IE和Opera中运行良好: 函数加载xmldoc(dname){ var xmlDoc //Internet Explorer 试一试{ xmlDoc=新的ActiveXObject('Microsoft.XMLDOM') } 捕获(e){ //Firefox、Opera等。 试一试{ xmlDoc=document.implementation.createDocument(“”,,,null) } 捕获(e){

我需要使用JavaScript加载和读取XML文件

以下代码在Firefox、IE和Opera中运行良好:

函数加载xmldoc(dname){
var xmlDoc
//Internet Explorer
试一试{
xmlDoc=新的ActiveXObject('Microsoft.XMLDOM')
}
捕获(e){
//Firefox、Opera等。
试一试{
xmlDoc=document.implementation.createDocument(“”,,,null)
}
捕获(e){
警报(e.message)
}
}
试一试{
xmlDoc.async=false
xmlDoc.load(dname)
返回xmlDoc
}
捕获(e){
警报(e.message)
}
返回空
}
但在Chrome中执行此代码会产生以下错误:

对象#没有方法“加载”

遗留代码
document.implementation.createDocument
不适用于Chrome和Safari

尽可能改用
XMLHttpRequest

函数loadXMLSync(url){
试一试{
//如果可用,则首选XMLHttpRequest
var xhr=newXMLHttpRequest()
xhr.open('GET',url,false)
setRequestHeader('Content-Type','text/xml')
xhr.send()
返回xhr.responseXML
}
捕获(e){
//XMLHttpRequest不可用,在ActiveXObject上回退
试一试{
var activex=new ActiveXObject('Microsoft.XMLDOM')
activex.async=false
activex.load(url)
返回activex
}
捕获(e){
//XMLHttpRequest或ActiveXObject都不可用
返回未定义
}
}
}

现代浏览器 如果您的目标是现代浏览器(>IE6),只需使用XMLHttpRequest:

函数loadXMLSync(url){
var xhr=newXMLHttpRequest()
xhr.open('GET',url,false)
setRequestHeader('Content-Type','text/xml')
xhr.send()
返回xhr.responseXML
}

关于MDN,有使用XMLHttpRequest的指南。但是,直到您深入了解返回类型并发现Google Chrome中不支持返回类型之前,doImplementation.createDocument中并不清楚。使用XMLHttpRequest。

按照此操作打印、加载和附加xml数据。此处xml作为字符串存储在javascript中。此方法在chrome中有效,firefox希望它也能在其他浏览器中有效

txt="<papers>"+"<paper>"+
 "<author>athor name</author>"+
"<title>title</title>"+
"<path>path</path>"+
"<track>which tack</track>"+
 "</paper>"+
"<paper>"+
"<author>athor name</author>"+
"<title>title</title>"+
"<path>path</path>"+
"<track>which tack</track>"+
"</paper>"+
"<paper>"+
"<author>athor name</author>"+
"<title>title</title>"+
"<path>path</path>"+
"<track>which tack</track>"+
"</paper>"+
"<papers>";
if (window.DOMParser)
  {
      parser=new DOMParser();
  xmlDoc=parser.parseFromString(txt,"text/xml");

   }
   else // Internet Explorer
    {
     xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
     xmlDoc.async=false;
     xmlDoc.loadXML(txt);
    }

x=xmlDoc.getElementsByTagName("paper"); 
for (var i = 0; i < x.length; i++) {  
    var athor =x[i].childNodes[0].firstChild.nodeValue;
    var title = x[i].childNodes[1].firstChild.nodeValue;
    var path = x[i].childNodes[2].firstChild.nodeValue;
    var tack =x[i].childNodes[3].firstChild.nodeValue;
    //do something with these values...
    //each iteration gives one paper details    
    var xml=document.getElementById("element_id");//<div id="element_id"></div>
    var li = document.createElement("br");// create a new <br>  
    newlink = document.createElement('A'); // creating an <a> element
    newlink.innerHTML = athor;// adding <a>athor value here</a>
    newlink.setAttribute('href', path);// <a href="path"></a>

    newlink.appendChild(li);// <a href="path">athor</a><br>
    document.getElementById("element_id").appendChild(newlink);
//finaly it becomes <div id="element_id"><a href="path">athor</a><br></div>


}
txt=”“+“”+
"
newlink.appendChild(li);//
document.getElementById(“元素id”).appendChild(newlink); //最后它变成了
}
我发布了这个答案

    var xhr = new XMLHttpRequest(); 
    xhr.open("GET", "/example/xdom/books.xml", false); 
    xhr.send(null); 
    xmlDoc = xhr.responseXML.documentElement; 
    return xmlDoc;
catch
语句中。如下所示:

function loadXMLDoc(dname) {
  var xmlDoc

  // Internet Explorer
  try {
    xmlDoc = new ActiveXObject('Microsoft.XMLDOM')
  }
  catch (e) {
    // Firefox, Opera, etc.
    try {
      xmlDoc = document.implementation.createDocument('', '', null)
    }
    catch (e) {
      alert(e.message)
    }
  }

  try {
    xmlDoc.async = false
    xmlDoc.load(dname)
    return xmlDoc
  }
  catch (e) {
    //alert(e.message)
    // For Chrome 
    var xhr = new XMLHttpRequest(); 
    xhr.open("GET", "/example/xdom/books.xml", false); 
    xhr.send(null); 
    xmlDoc = xhr.responseXML.documentElement; 
    return xmlDoc;
  }

  return null
}

不是只有
loadXML
而不是
load
?嗨@putvande..谢谢你的回复,我无法从你那里得到答案?loadXML只是w3school网站上的函数。我的问题是chrome浏览器无法正常工作..有什么办法解决我的问题吗?为什么要使用XMLDocument对象而不是DOMParser/Microsoft.XMLDOM?你可以加载xml带有XHTML HTTP请求的文本。嗨@HMR..我明白你的意思了..我是xml解析功能的新手。我只搜索xml DOM..我在DOM-parser方面有更多的知识。你能给我一些想法吗?这对meHi@HMR更有用..有什么想法吗?请你发表一些负责任的评论。ActiveXObject不适合现代浏览器吗?