在Chrome中使用JavaScript读取XML文件
我需要使用JavaScript加载和读取XML文件。在Chrome中使用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# has no method "load"
遗留代码
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 xmlhttp.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
}
好套!你的代码对我来说是完全不可思议的......它对我来说工作得很好... – user2711066
是不是ActiveXObject弃用现代浏览器? – mmcrae
在MDN,有使用XMLHttpRequest的指导。但是,直到深入了解返回类型并看到XMLDocument在Google Chrome中不受支持时,才从DOMImplementation.createDocument清楚。 example on W3Schools使用XMLHttpRequest。
按照这个打印,负载,追加XML data.Here XML存储为字符串内javascript.This方法在Chrome的工作,火狐希望它会在其他工作太
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>
}
我张贴了这个答案here
它不仅仅是'loadXML'而不是'load'? – putvande
您好@ putvande ..感谢您回复我,我无法从您那里得到? Loadxml只是从w3school网站采取的功能。我的问题是铬浏览器将无法正常工作..任何想法我的问题? – user2711066
为什么使用XMLDocument对象而不是DOMParser/Microsoft.XMLDOM?您可以使用xhmlhttp请求加载xml文本。 – HMR