在Chrome中使用JavaScript读取XML文件

8

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

以下代码在Firefox、IE和Opera中都可正常工作:

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)
  }

  return null
}

在Chrome中执行这段代码时,我遇到了以下错误:

Object#没有"load"方法


不是应该使用 loadXML 而不是 load 吗? - putvande
嗨@putvande,谢谢你回复我。我无法从你那里得到什么?Loadxml只是从w3school网站获取的函数。我的问题是Chrome浏览器不能正常工作。你有什么想法解决我的问题吗? - user2711066
为什么要使用XMLDocument对象而不是DOMParser/Microsoft.XMLDOM?您可以使用xhmlhttp请求加载xml文本。 - HMR
嗨@HMR..我明白你的意思..我是XML解析功能的新手。我只在搜索XML DOM..我对Dom-parser有很多了解,你能给我一些建议吗?这对我会更有帮助。 - user2711066
嗨@HMR,你有什么想法吗?请给出一些负责任的评论。 - user2711066
4个回答

7

遗留代码

document.implementation.createDocument 在 Chrome 和 Safari 上无法使用。

如果可能的话,请改用 XMLHttpRequest

function loadXMLSync(url) {
  try {
    // Prefer XMLHttpRequest when available
    var xhr = new XMLHttpRequest()
    xhr.open('GET', url, false)
    xhr.setRequestHeader('Content-Type', 'text/xml')
    xhr.send()

    return xhr.responseXML
  }
  catch (e) {
    // XMLHttpRequest not available, fallback on ActiveXObject
    try {
      var activex = new ActiveXObject('Microsoft.XMLDOM')
      activex.async = false
      activex.load(url)

      return activex
    }
    catch (e) {
      // Neither XMLHttpRequest or ActiveXObject are available
      return undefined
    }
  }
}

现代浏览器

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

function loadXMLSync(url) {
  var xhr = new XMLHttpRequest()

  xhr.open('GET', url, false)
  xhr.setRequestHeader('Content-Type', 'text/xml')
  xhr.send()

  return xhr.responseXML
}

现代浏览器不是已经弃用了ActiveXObject吗? - Don Cheadle

1
在MDN上,有关于使用XMLHttpRequest的指导。但从DOMImplementation.createDocument中并不清楚,直到你深入了解返回类型并看到Google Chrome不支持XMLDocument时才明白。W3Schools上的示例使用XMLHttpRequest。

0

添加

    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
}

0

按照以下步骤打印、加载、追加 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>


}

我在这里发布了这个答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接