在Chrome中使用JavaScript读取XML文件
我需要使用JavaScript加载和读取XML文件 以下代码在Firefox、IE和Opera中运行良好:在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){
函数加载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不适合现代浏览器吗?