如何读取JavaScript中的XML?
好的,我得到了这个xml文件:如何读取JavaScript中的XML?,javascript,html,xml,Javascript,Html,Xml,好的,我得到了这个xml文件: <?xml version="1.0" encoding="UTF-8" ?> <level> <tiles> <row>1000000000000001</row> <row>1000000000000001</row> <row>1000000000000001</row> <
<?xml version="1.0" encoding="UTF-8" ?>
<level>
<tiles>
<row>1000000000000001</row>
<row>1000000000000001</row>
<row>1000000000000001</row>
<row>1000000000000001</row>
<row>1000000000000001</row>
<row>1000000000000001</row>
<row>1000000000000001</row>
<row>1111111111111111</row>
</tiles>
</level>
及
函数loadXML(){
load(“levels/test.xml”);
xmlDoc.onload=readLevel();
}
函数readLevel(){
投掷(xmlDoc);
if(xmlDoc.getElementsByTagName(“tiles”)[0].hasChildNodes(){
var rowNum=xmlDoc.getElementsByTagName(“tiles”).getChildNodes();
级别=[];
对于(变量i=0;i
为什么这不起作用?它不断地说
xmlDoc.getElementsByTagName(“tiles”)[0]
是未定义的,并且xmlDoc.getElementsByTagName(“tiles”).length=0
。那么我做错了什么?,所有参数都是createDocument
中必需的。可能是falsy的值把你绊倒了。我会使用XMLHttpRequest
及其responseXML
属性,它将在所有主要浏览器中工作。例如:
function readLevel(xmlDoc) {
alert(xmlDoc.documentElement.tagName);
// Your existing code goes here
};
var createXmlHttpRequest = (function() {
var factories = [
function() { return new XMLHttpRequest(); },
function() { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); },
function() { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); },
function() { return new ActiveXObject("Microsoft.XMLHTTP"); }
];
for (var i = 0, len = factories.length; i < len; ++i) {
try {
if ( factories[i]() ) return factories[i];
} catch (e) {}
}
})();
var xmlHttp = createXmlHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
readLevel(xmlHttp.responseXML);
}
};
xmlHttp.open("GET", "levels/test.xml", true);
xmlHttp.send(null);
函数读取级别(xmlDoc){
警报(xmlDoc.documentElement.tagName);
//您现有的代码在这里
};
var createXmlHttpRequest=(函数(){
var工厂=[
函数(){返回新的XMLHttpRequest();},
函数(){返回新的ActiveXObject(“Msxml2.XMLHTTP.6.0”);},
函数(){返回新的ActiveXObject(“Msxml2.XMLHTTP.3.0”);},
函数(){返回新的ActiveXObject(“Microsoft.XMLHTTP”);}
];
对于(变量i=0,len=factories.length;i
AFAIK,添加的空间之间不应该有空格,什么也没有发生。不,“不应该是空格”意味着你必须删除它。;-)好的,我试过了,得到了这样的结果:试图创建或更改一个对象的方式与名称空间的“代码”不符:“14使用此代码:var xmlDoc=document.implementation.createDocument(“);@CyanPrime–另请参见。现在使用此var xmlDoc=document.implementation.createDocument(“”,'xml:lang',null);仍然不工作该名称空间是为以
开头的(特定)元素名保留的。您根本不需要指定名称空间。抱歉,但在这段代码中,似乎从未调用过readLevel。@CynPrime:这是什么意思?您是指读取还是运行它?readLevel()
是在onreadystatechange
处理程序中调用的。我已经尝试过了,它在所有主流浏览器中都能正常工作。
function loadXML(){
xmlDoc.load("levels/test.xml");
xmlDoc.onload = readLevel();
}
function readLevel() {
throw(xmlDoc);
if(xmlDoc.getElementsByTagName("tiles")[0].hasChildNodes()){
var rowNum = xmlDoc.getElementsByTagName("tiles").getChildNodes();
level = [];
for(var i = 0; i < rowNum; i++){
level[i] = [];
var tempStr = xmlDoc.getElementsByTagName("tiles").childNodes[i].textContent;
for(var j = 0; j < 16; j++){
level[i][j] = parceInt(tempStr.charAt(j));
}
}
}
for (var i = 0; i < level.length; i++) {
blockArray[i] = []; // Create the second level for this index
for (var j = 0; j < level[i].length; j++) {
var tempImg = new Image();
tempImg.src = "images/block" + level[i][j] + ".png";
blockArray[i][j] = new block(j * blockSize, i * blockSize, level[i][j], false, false, tempImg);
//throw('blockArray['+i+']'+j+'] = ' + level[i][j]);
}
}
}
function readLevel(xmlDoc) {
alert(xmlDoc.documentElement.tagName);
// Your existing code goes here
};
var createXmlHttpRequest = (function() {
var factories = [
function() { return new XMLHttpRequest(); },
function() { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); },
function() { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); },
function() { return new ActiveXObject("Microsoft.XMLHTTP"); }
];
for (var i = 0, len = factories.length; i < len; ++i) {
try {
if ( factories[i]() ) return factories[i];
} catch (e) {}
}
})();
var xmlHttp = createXmlHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
readLevel(xmlHttp.responseXML);
}
};
xmlHttp.open("GET", "levels/test.xml", true);
xmlHttp.send(null);