Продолжающаяся сага «Атрибут узла XML-ориентирования, вставка в массив Flash AS3» - PullRequest
1 голос
/ 19 марта 2012

У меня есть еще один вопрос, который вытекает из ранее заданного вопроса: XML - атрибут узла таргетинга, вставить в массив Flash AS3 . Мне сказали задать новый вопрос, а не обновлять старый.

Вот выдержка из моего файла XML. (Он правильно отформатирован, имеет корневой узел и т. Д., Но слишком длинный, чтобы опубликовать все это. Ниже приведена только часть, которая меня интересует.

<question id='Q1' uId='99036'  no_ans='2' txt='In a flat structure employees are not expected to provide their bosses with their opinions.' feedback='' type='MC' passingWeight='1' url='media/'>
    <answer id='Q1A1' uId='311288' txt='True' weight='0'/>
    <answer id='Q1A2' uId='311289' txt='False' weight='1'/>
</question>
<question id='Q2' uId='99037'  no_ans='2' txt='In a hierarchy, information typically flows downward.' feedback='' type='MC' passingWeight='1' url='media/'>
    <answer id='Q2A1' uId='311290' txt='True' weight='1'/>
    <answer id='Q2A2' uId='311291' txt='False' weight='0'/>
</question>
<question id='Q3' uId='99038'  no_ans='2' txt='Someone who keeps many projects going at one time is an example of someone who is flexible-time oriented.' feedback='' type='MC' passingWeight='1' url='media/'>
    <answer id='Q3A1' uId='311292' txt='True' weight='1'/>
    <answer id='Q3A2' uId='311293' txt='False' weight='0'/>
</question>

Это то, что я использую для получения атрибута txt из тега question .

//load the xml
var myXML:XML;
var myLoader:URLLoader = new URLLoader();
myLoader.load(new URLRequest("html/BlahBlah/manifest.xml"));
myLoader.addEventListener(Event.COMPLETE, processXML);
function processXML(e:Event):void {
    myXML = new XML(e.target.data);
    trace(myXML.*);



    //.....Your 'myXML' is here....
    questions = {};
    //Extracting question from xml
    for each (var item:XML in myXML.question) {
        questions[item. @ id] = item. @ txt;
    }

}

Ниже приведена функция на отдельном кадре, которая увеличивает длину флага.

//Question list
var questions:Object;
//Some method for fetching question from question list
function getQuestionAt( index:Number ):String {
    if (questions["Q" + index] == undefined) {
        throw new Error("Wrong index for question!!!");
    }
    return questions["Q"+index];
}

Ссылаясь на эту функцию, я затем использую ее для определения целевого атрибута txt для заполнения динамического текстового поля:

question1_mc.question_txt.htmlText = "<b>Question 1: </b><br>"+ getQuestionAt(1);

Теперь мне нужен способ получить значение атрибута txt из тегов ответа и получить доступ к ним из любой точки флага. Имейте в виду, что есть два ответа на каждый вопрос. то есть:

True ' weight = '0' />
False ' weight = '1' />

1 Ответ

0 голосов
/ 19 марта 2012

Я думаю, что есть более простой способ сделать это. Вместо того, чтобы загружать XML и хранить ваши вопросы в объекте, просто обратитесь к объекту XML. XML уже является объектом, поэтому нет смысла анализировать его в другом объекте. Кроме того, вы сможете получать всю необходимую информацию по мере необходимости. Вот как я бы предложил это сделать:

var myXML:XML;

var myLoader:URLLoader = new URLLoader();
myLoader.addEventListener(Event.COMPLETE, complete);
myLoader.load(new URLRequest("html/BlahBlah/manifest.xml"));

function complete(e:Event):void {
    myLoader.removeEventListener(Event.COMPLETE, complete);
    myXML = new XML(e.target.data);

    //Data for question 1
    trace(getQuestionByIndex(1).@txt); // Question
    for each (var o:Object in getAnswersByQuestionIndex(1)) {
        trace(o.@txt); // Answers
    }
}

function getQuestionByIndex(index:int):XMLList {
    return myXML.question.(@id=="Q"+index);
}

function getAnswersByQuestionIndex(index:int):XMLList {
    return getQuestionByIndex(index).answer;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...