Curs Flash

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
Ce tag adauga imagine in pagina web?
<div> <img> <span>
<img src="http://coursesweb.net/imgs/webcourses.gif" width="191" height="63" alt="Courses-Web" />
Care din aceste coduri CSS afiseaza textul inclinat?
font-style: italic; text-decoration: underline; font-weight: 500;
#id {
  font-style: italic;
}
Clic pe functia jQuery care ascunde animat un element HTML.
click() hide() show()
$(document).ready(function() {
  $(".a_class").click(function(){ $(this).hide("slow"); });
});
Clic pe functia definita corect in PHP.
fname function() {} function fname() {} function $fname() {};
function fname($a, $b) {
  echo $a * $b;
}
Indicati forma pentru Prezent Perfect Continuu a verbului "to walk" (a merge).
have walked have been walking be walking
I have been walking for 5 hours.
- Merg pe jos de 5 ore.
Indicati Trecutul Nedefinit pentru verbul "ser" (a fi) la forma Yo.
será sería fui
Yo fui entrenador.
- Am fost antrenor.
Incarcare si parcurgere XML din fisier extern

Last accessed pages

  1. Prezentul simplu - Exercitii si teste incepatori (66441)
  2. Prezentul simplu si continuu - Present Tense Simple and Continuous (145427)
  3. Node.js cu baza de date MySQL (1234)
  4. Exercitii zilnice pentru studenti, 1-60 (1212)
  5. Definire Variabile si Constante (6130)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (1260)
  2. Curs HTML gratuit Tutoriale HTML5 (967)
  3. Coduri pt culori (721)
  4. Creare si editare pagini HTML (567)
  5. Conditional IF in Limba Engleza - Fraze Conditionale (524)