使用循环从XML获取节点的值

时间:2011-02-11 21:36:13

标签: xml actionscript-3 flash-cs5

尝试循环我的XML数据并分配给文本字段。没有得到特定的错误,但我很确定它与我引用数据的方式有关,并将其分配给.text框。我也遇到了获取xml长度的问题所以我知道要循环多少次。请帮忙。谢谢!

首先是我的XML摘要:

<Worksheet>
   <Row>
    <Data>Last Name</Data>
    <Data>First Name</Data>
    <Data>Ext.</Data>
   </Row>
   <Row>
    <Data>Smith</Data>
    <Data>Liz</Data>
    <Data>103</Data>
   </Row>
   <Row >
    <Data>Johns</Data>
    <Data>Jason</Data>
    <Data>116</Data>
   </Row>
   <Row>
    <Data>Potts</Data>
    <Data>Cheryl</Data>
    <Data>131</Data>
   </Row>
</Worksheet>

现在应该循环的AS3并将XML中的值分配到文本字段中:

//获得myXML长度的问题

                for (i = 0; i < myXML.Worksheet.length(); i++){

                trace(["in for loop" + i]);
                                 //Create new text_holder from linked MC
                var item:text_holder = new text_holder();
                 //add text holder to stage
                scroll_box.addChild(item);

//现在我想将动态文本字段中的第一个三个数据节点的值分配给动态文本字段

                        item.first_name.text = myXML.Worksheet.Row[i].Data[1];
                        item.last_name.text = myXML.Worksheet.Row[i].Data[0];
                        item.ext.text = myXML.Worksheet.Row[i].Data[2];
                            current_y_right = current_y_right  + 131;
                            item.x = current_x_right;
                            item.y = current_y_right;

                    }

3 个答案:

答案 0 :(得分:2)

你在这里。在节点上使用.text()来获取其值。

var loader:URLLoader = new URLLoader(new URLRequest("test.xml"));
loader.addEventListener(Event.COMPLETE, loaded, false, 0, true);

function loaded(evt:Event):void
{
    var xml:XML = new XML(evt.currentTarget.data);
    for(var i:int=0;i<xml.children().length();i++)
    {
        var _row = xml.children()[i];
        for(var j:int=0;j<_row.children().length();j++)
        {
            var _data = _row.children()[j];
            trace(_data.text());
        }
    }
}

如果需要(我推荐),请将每个节点存储在数组或对象中以供外部参考。

答案 1 :(得分:1)

使用:

for(var i : int = 0; i < myXML.Worksheet.Row.length(); i++){
... = myXML.Worksheet.Row[i].Data[0];
}

或者如果Worksheet是您只需要

的根节点
myXML.Row.length();

但您也可以使用

myXML..Row.length();

如果你不在乎它嵌套在xml中有多远。

答案 2 :(得分:0)

首先在引用XML元素时跳过根节点。所以没有myXML.Worksheet.Row [i],而是使用myXML.Row [i]。其次(并记住前面的注释),你在Rows上进行迭代,所以你需要myXML.Row.length()而不是myXML.Worksheet.length()。