如何在JavaScript中读取XML? [英] How do I read XML in JavaScript?

查看:87
本文介绍了如何在JavaScript中读取XML?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



 <?xml version =1.0encoding =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>

我得到了我的XML阅读代码:

  var xmlDoc = document.implementation.createDocument(,,null); 

  function loadXML(){
xmlDoc.load(levels / test.xml);
xmlDoc.onload = readLevel();

函数readLevel(){


throw(xmlDoc); ();

if(xmlDoc.getElementsByTagName(tiles)[0] .hasChildNodes()){
var rowNum = xmlDoc.getElementsByTagName(tiles)。getChildNodes();
level = [];
for(var i = 0; i level [i] = [];
var tempStr = xmlDoc.getElementsByTagName(tiles)。childNodes [i] .textContent; (var j = 0; j< 16; j ++){
level [i] [j] = parceInt(tempStr.charAt(j))的
;
}




(var i = 0; i blockArray [我] = []; //为此索引创建第二级
(var j = 0; j var tempImg = new Image();
tempImg.src =images / block+ level [i] [j] +.png;
blockArray [i] [j] =新块(j * blockSize,i * blockSize,level [i] [j],false,false,tempImg);
// throw('blockArray ['+ i +']'+ j +'] ='+ level [i] [j]);



$ / code $ / pre

现在为什么不是这样加工?它经常表示 xmlDoc.getElementsByTagName(tiles)[0] 未定义,并且 xmlDoc.getElementsByTagName(tiles)。length = 0 。所以我做错了什么?

解决方案

我会使用 XMLHttpRequest 和它的 responseXML 属性,它可以在所有主流浏览器中使用。例如:

  function readLevel(xmlDoc){
alert(xmlDoc.documentElement.tagName);
//你现有的代码在这里
};

var createXmlHttpRequest =(function(){
var factory = [
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]())返回工厂[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);


Alright, so I got this xml file:

<?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>

and I got my XML reading code:

var xmlDoc = document.implementation.createDocument("","",null);

and

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

Now why isn't this working? It constantly says xmlDoc.getElementsByTagName("tiles")[0] is undefined and that xmlDoc.getElementsByTagName("tiles").length = 0. So what am I doing wrong?

解决方案

I'd use XMLHttpRequest and its responseXML property instead, which will work in all major browsers. Example:

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

这篇关于如何在JavaScript中读取XML?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆