Павел Левкович
*авторизированный доступ


Простой доступ к данным XML во Flash (ActionScript) [08/09/04]
музыка: Ария


При использовании XML данных в своих скриптах, будь то JavaScript или ActionScript, необходимо постоянно помнить о порядке получаемых данных. Это затрудняет модернизацию ранее написанных скриптов и изменение XML документа (добавление новых обьектов и изменение их порядка).

 

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

 

Ниже приводится функция, написанная на ActionScript (Flash 7), которая позволяет обращаться к загруженному XML документу, используя обычный массив.

 


function
varData(obj){
  var result = new Array();
  if (!obj.firstChild.nodeValue.length && obj.attributes.textType!="true"){
     for (var i=0; i < obj.childNodes.length; i++){
         var nodeNameTemp = obj.childNodes[i].nodeName;
         if (result[nodeNameTemp]){
              if (!result[nodeNameTemp][0]){
                  var nTemp=result[nodeNameTemp];
                  result[nodeNameTemp] = new Array();
                  result[nodeNameTemp][0]=nTemp;
               }
               result[nodeNameTemp][result[nodeNameTemp].length]=varData(obj.childNodes[i]);
         } else result[nodeNameTemp]=varData(obj.childNodes[i]);
     }
  } else {
     if (obj.attributes.textType!="true")
         result["_content"]=obj.firstChild.toString();
     else {
         result["_content"]=obj.toString();
         result["_content"]=result["_content"].substring(result["_content"].indexOf(">")+1,result["_content"].lastIndexOf("/>"));
     }
  }
  result["_attributes"]=obj.attributes;
  return result;


 

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

 

Формат полученного массива следующий:

 

  • Для содержимого ­­­     - корень[“узел1”][“узел2”][“_content”] (если узел2 – единственный потомок у узла1)
                                            - корень[“узел1”][“узел2”][индекс][“_content”] (если узлов2 несколько, индекс начинается с нуля)
  • Для атрибутов - корень[“узел1”][“узел2”][“_attributes”][“имя атрибута”]

  

В ActionScript к массиву можно обращаться и опуская [], т.е корень.узел1.узел2._content или корень.узел1.узел2._attributes.имя_атрибута (подробнее об этом в мануал по ActionScript)

 

Таким образом для загрузки XML документа нужно написать следующий код:

 


function
parseXML(){
            arrXML = varData(this.firstChild);
            delete data_xml;
            //дальше действия над данными или переход на другие фреймы
}
 
System
.useCodepage = true; //(если используете кириллицу)
data_xml = new XML();
data_xml.ignoreWhite = true;
data_xml.onLoad = parseXML;
data_xml.load(“путь к xml файлу”);

 

Обратиться к элементам массива можно будет так: arrXML.node.node[0]._content и arrXML.node.node[0]._attributes.attribute

 

Важной возможностью функции является то, что узлы отмеченные атрибутом textType="true" не будут обрабатываться как XML данные, а будут представлены как текст. Это дает возможность использовать HTML теги в XML узлах и их последующее применение, например, в textHtml.

 


Создать закладку Google slashdot YahooMyWeb Digg Technorati Delicious Забобрить эту статью! Добавьте на news2.ru




Павел Левкович

ФИО: Павел Левкович
Должность: программист
Ник: linur

Личные данные  Письмо автору

Yandex RSS



количество читателей онлайн и всего
BLOGUS.RU
Рейтинг блогов

Вверх
Вернуться

Поиск
© Red Graphic Systems