De obicei, in majoritatea aplicatiilor, datele in format XML sunt incarcate din fisiere externe.
ActionScript 3 contine functii speciale prin care poate fi incarcat si utilizat continutul dintr-un fisier extern.
Pentru a prelua datele dintr-un fisier XML se executa urmatorii pasi:

  1. Se creaza un obiect URLRequest in care e adaugata adresa fisierului XML.
  2. Se creaza un obiect URLLoader, iar la declararea acestuia se adauga ca argument obiectul definit cu "URLRequest".
  3. La instanta celui de-al doilea obiect (URLLoader) se inregistreaza cu addEventListener() evenimentul Event.COMPLETE (prin acesta se detecteaza cand fisierul e incarcat complet)
  4. Se defineste functia care trebuie apelata de evenimentul inregistrat, in care, cu proprietatea data aplicata la instanta "URLLoader" se preia datele incarcate si le transfera la o instanta de obiect XML.
- Dupa ce au fost astfel preluate datele din fisierul extern si adaugate intr-o variabila de tip XML, elementele si atributele din continutul XML pot fi accesate si prelucrate cu metodele specifice E4X (prezentate in lectia anterioara).
Iata si un exemplu practic. Se creaza un fisier denumit "xmltest.xml", in care se adauga urmatorul cod XML. Fisierul trebuie salvat in acelasi director unde e si documentul Flash in care va fi incarcat.

Datele XML din xmltest.xml

<?xml version="1.0"?>
<site>
  <cursuri>
    <curs id="1" title="PHP-MySQL">marplo.net/php-mysql/</curs>
    <curs id="2" title="JavaScript">marplo.net/javascript/</curs>
    <curs id="3" title="FlashActionScript">marplo.net/flash/</curs>
  </cursuri>
</site>
In panoul pt. ActionScript din documentul Flash se adauga urmatorul script:
// Declarare instanta de obiect XML
var test_xml:XML;

// Creare obiect pentru adresa fisierului
var url:URLRequest = new URLRequest('xmltest.xml');

// Obiectul pt. incararea adresei (la argument se adauga obiectul cu adresa)
var loader:URLLoader = new URLLoader(url);

// Inregistrare eveniment care detecteaza incarcarea completa a datelor
// Moment in care apeleaza functia "getXml()"
loader.addEventListener(Event.COMPLETE, getXml);

// Functia getXml() apelata de eveniment
function getXml(evt:Event):void
{
  // Daca datele sunt incarcate (stocate in proprietatea "data" a obiectului "loader")
  if(loader.data)
  {
    // Sterge inregistrarea evenimentului, ne mai fiind necesara, si elibereaza memoria
    loader.removeEventListener(Event.COMPLETE, getXml);

    // Adauga datele in instanta XML
    test_xml = XML(loader.data);

    /* Se acceseaza datele incarcate */

    var nr_c:int = test_xml.cursuri.*.length();       // Preia Nr. elemente din <cursuri> (3)

    // Returneaza numele tagului radacina
    trace(test_xml.localName());            //site

    // Datele ultimului element din <cursuri> (nr_c-1)
    trace(test_xml.cursuri.child(nr_c-1));        // marplo.net/flash/
  }
}
- Deoarece in variabila 'nr_c' e retinut numarul de elemente (tag-uri) din <cursuri>, (nr_c-1) reprezinta index-ul ultimului element, iar expresia "test_xml.cursuri.child(nr_c-1)" preia datele din el.
- Pentru alte explicatii despre incarcarea datelor si functiile folosite, sunt comentariile din cod.
- Acest exemplu va afisa in Output:
site
marplo.net/flash/

Parcurgere obiect XML

Parcurgerea unui obiect inseamna accesarea pe rand a fiecarui element (unul dupa altu) din acel obiect.
De exemplu, intr-un obiect XML, daca se doreste cautarea tag-urilor care contin un anumit atribut, trebuie parcurs obiectul pentru verificarea fiecarui elemet.
Parcurgerea se face cu instructiunea "for each ... in", sintaxa generala este:

- Formula "..*" aplicata la ObiectXML face ca parcurgerea sa se faca in toate elementele imbricate in el.
- Variabila "elm" retine in ea elementul curent parcurs.

Iata cum pot fi parcurse datele din fisierul "xmltest.xml" (folosit in exemplu precedent).
Se aplica metoda de incarcare prezentata mai sus, iar in functia apelata dupa incarcarea completa (getXml()) se adauga instructiunea de parcurgere "for each ... in", in corpul ei se verifica (cu "if()") daca elementul parcurs contine atributul "id" si acesta are valoarea 2. Daca sunt indeplinite conditiile, returneaza cu "trace()" numele si textul din acel element.
// Declarare instanta de obiect XML
var test_xml:XML;

// Creare obiect pentru adresa fisierului
var url:URLRequest = new URLRequest('xmltest.xml');

// Obiectul pt. incararea adresei (la argument se adauga obiectul cu adresa)
var loader:URLLoader = new URLLoader(url);

// Inregistrare eveniment care detecteaza incarcarea completa a datelor
// Moment in care apeleaza functia "getXml()"
loader.addEventListener(Event.COMPLETE, getXml);

// Functia getXml() apelata de eveniment
function getXml(evt:Event):void
{
  // Daca datele sunt incarcate (stocate in proprietatea "data" a obiectului "loader")
  if(loader.data)
  {
    // Sterge inregistrarea evenimentului, ne mai fiind necesara, si elibereaza memoria
    loader.removeEventListener(Event.COMPLETE, getXml);

    // Adauga datele in instanta XML
    test_xml = XML(loader.data);

    // Se parcurg elementele din fiecare tag descendent (..*) din "test_xml"
    for each(var elm:XML in test_xml..*)
    {
      // Daca elementul (tagul) parcurs are atributul "id" si acesta are valoarea 2
      // Afiseaza numele acelui tag si textul din el
      if(elm.hasOwnProperty("@id") && elm.@id==2) trace(elm.localName()+ ' - '+ elm.text());

      // Afiseaza:     curs - marplo.net/javascript/
    }
  }
}
- Expresia "test_xml..*" face ca parcurgerea sa se faca in fiecare descendent din "text_xml" (element copil, nepot, ...). Daca se scrie doar "test_xml" nu sunt parcurse si verificate tag-urile mai imbricate, ci doar cele copil (despre descendenti sunt explicatii in lectia anterioara).
- Tag-ul curent parcurs e retinut in variabila "elm", iar "elm.hasOwnProperty("@id")" verifica daca acesta contine atributul "id". Fara aceasta metoda de verificare, daca elementul parcurs nu are acel atribut, conditia "elm.@id==2" returneaza eroare.
- "elm.localName()" preia numele tag-ului, "elm.text()" textul din el.
- Scriptul afiseaza in Output: curs - marplo.net/javascript/

Pentru ca parcurgerea sa se faca doar la atribute, se foloseste formula:
                  for each(var atr:* in ObiectXML..@*)
- Pentru exemplu de mai sus s-ar aplica:
          for each(var atr:* in test_xml..@*) {
              if(atr==2) trace(atr.parent().localName()+ ' - '+ atr.parent().text());
          }
- "parent()" returneaza elementul parinte (cel in care e inclus).
- Rezultatul afisat este acelasi.


Fisierul FLA si "xmltest.xml" cu exemplele din aceasta lectie poate fi descarcat de la: XML - incarcare, parcurgere.

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag defineste zona de click intr-o harta creata dintr-o imagine?
<map> <img> <area>
<img src="image.jpg" usemap="#map1">
<map name="map1">
  <area shape="rect" coords="9, 120, 56, 149" href="#">
  <area shape="rect" coords="100, 200, 156, 249" href="#">
</map>
Ce proprietate CSS indica ce sa se intample cand continutul unui element depaseste dimensiunile lui?
display overflow position
#id {
  overflow: auto;
}
Clic pe evenimentul care este declansat cand mouse-ul e deasupra unui obiect.
onclick onmouseover onmouseout
document.getElementById("id").onmouseover = function(){
  document.write("Sa ai Viata Buna");
}
Indicati variabila PHP ce contine datele adaugate in adresa URL, dupa caracterul "?".
$_SESSION $_GET $_POST
if(isset($_GET["id"])) {
  echo $_GET["id"];
}
Clic pe pronumele reflexiv care e potrivit in propozitia: "Marc is the boy ... won the prize".
who which whoever
Marc is the boy who won the prize.
- Marc e baiatul care a castigat premiul.
Clic pe pronumele reflexiv care e potrivit in propozitia: "Voy a ver al pintor de ... les hablé ayer".
que quien cuyo
Voy a ver al pintor de quien les hablé ayer.
- Ma duc sa vad pictorul despre care ti-am vorbit ieri.
Incarcare si parcurgere XML din fisier extern

Last accessed pages

  1. Download carti electronice si programe pentru Limba Engleza (17548)
  2. Conditional IF in Limba Engleza - Fraze Conditionale (40187)
  3. Verbe modale - SHALL, SHOULD, OUGHT TO, WILL, WOULD, USED TO, BE TO, DARE (14497)
  4. Prezentul continuu - Exercitii si teste incepatori (10539)
  5. Creare aceeasi inaltime la elemente HTML (57)

Popular pages this month

  1. Prezentul simplu si continuu - Present Tense Simple and Continuous (3706)
  2. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (3277)
  3. Gramatica limbii engleze - Prezentare Generala (2797)
  4. Prezent perfect si Prezent perfect continuu - Present perfect and Continuous (2397)
  5. Trecutul simplu si continuu - Past Tense Simple and Continuous (2005)