Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AS2 XML解析、循环、数组和;物体_Xml_Actionscript 2 - Fatal编程技术网

AS2 XML解析、循环、数组和;物体

AS2 XML解析、循环、数组和;物体,xml,actionscript-2,Xml,Actionscript 2,我想用AS2解析一个XML文件,但我不确定如何将检索到的值放入一个对象数组中,其中的键数与找到的值匹配。代码有if语句来过滤掉不需要的元素,但是数组键的数量将始终等于for循环的长度限制 如何创建只包含未定义值的对象数组? //AS2 var xml:XML = new XML(); xml.ignoreWhite=true; xml.onLoad = function(success) { if (success) { var myImage = xml.

我想用AS2解析一个XML文件,但我不确定如何将检索到的值放入一个对象数组中,其中的键数与找到的值匹配。代码有if语句来过滤掉不需要的元素,但是数组键的数量将始终等于for循环的长度限制

如何创建只包含未定义值的对象数组?

//AS2

var xml:XML = new XML();
xml.ignoreWhite=true;

xml.onLoad = function(success)
{
    if (success) 
    {
        var myImage = xml.firstChild.childNodes;
        var img_arr = new Array();

        for (i=0; i<myImage.length; i++) 
        {
            img_arr[i] = new Object();

            var nodeName = xml.firstChild.childNodes[i].NodeName;


            //condition to filter out values
            if (nodeName == "value")
            {
                img_arr[i]["file"] = xml.firstChild.childNodes[i].firstChild.NodeValue;
                img_arr[i]["name"] = xml.firstChild.childNodes[i].childNodes[1].NodeValue;    
            }
        }
        //trace(img_arr.length)
    }
}
xml.load("test.xml");
//AS2
var xml:xml=new xml();
ignoreWhite=true;
xml.onLoad=函数(成功)
{
如果(成功)
{
var myImage=xml.firstChild.childNodes;
var img_arr=新数组();

对于(i=0;i您可以在将空值推入数组之前尝试查找空值

比如:

if (xml.firstChild.childNodes[i].firstChild.NodeValue.length > 0) {
    // here put the value into your array
}
使用值的长度来查找其是否为null(将其视为字符串)有时会很有用:如果为0,则表示在nodeValue中未找到任何字符,表示节点不存在或节点为空

使用您的代码,以下是我的建议(必须很可能适应您正在做的事情,尚未经过测试):

for(i=0;i 0&&xml.firstChild.childNodes[i].childNodes[1].NodeValue.length>0){
newNode=新对象();
newNode[“file”]=xml.firstChild.childNodes[i].firstChild.NodeValue;
newNode[“name”]=xml.firstChild.childNodes[i].childNodes[1].NodeValue;
}
}
if(newNode!=null&&newNode!=未定义){
img_arr.push(新节点);
}
}

@Jens Struwe,是的。可能需要某种数组推送。在断断续续地研究了一年左右之后,我终于意识到,如果在我的问题中的条件中添加“&&nodeValue!=undefined”,它可能会像你建议的那样检查长度。是时候测试一下了。
for (i=0; i<myImage.length; i++) {
    var nodeName:String = xml.firstChild.childNodes[i].NodeName;
    var newNode:Object;

    //condition to filter out values
    if (nodeName == "value") {
        // means that both of the nodes exists and contain a valid value
        if (xml.firstChild.childNodes[i].firstChild.NodeValue.length > 0 && xml.firstChild.childNodes[i].childNodes[1].NodeValue.length > 0) {
           newNode = new Object();
           newNode["file"] = xml.firstChild.childNodes[i].firstChild.NodeValue;
           newNode["name"] = xml.firstChild.childNodes[i].childNodes[1].NodeValue;
       }
    }
    if (newNode != null && newNode != undefined) {
        img_arr.push(newNode);
    }
}