Получить значение узла из XML, используя цикл - PullRequest
0 голосов
/ 12 февраля 2011

Попытка зациклить мои данные 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 ]

2 голосов
/ 12 февраля 2011

Вот, пожалуйста. Используйте .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 голос
/ 12 февраля 2011

использование:

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 он находится.

0 голосов
/ 12 февраля 2011

Прежде всего, пропустите корневой узел при обращении к элементам XML. Так что нет myXML.Worksheet.Row [i], вместо этого используйте myXML.Row [i]. Во-вторых (и с учетом предыдущего комментария), вы перебираете строки, поэтому вам нужно myXML.Row.length () вместо myXML.Worksheet.length ().

...