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:
<?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.
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:
// 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).
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.
<ul> <li>http://coursesweb.net/html/</li> <li>http://www.marplo.net/html/</li> </ul>
.some_class { display: list-item; }
var obj = { "courses": ["php", "javascript", "ajax"] }; var jsonstr = JSON.stringify(obj); alert(jsonstr); // {"courses":["php","javascript","ajax"]}
$strhtml = '<body><div id="dv1">CoursesWeb.net</div></body>'; $dochtml = new DOMDocument(); $dochtml->loadHTML($strhtml); $elm = $dochtml->getElementById("dv1"); echo $elm->nodeValue; // CoursesWeb.net
I`m living here. - Traiesc /Locuiesc aici.
Estoy viviendo aquĆ. - Traiesc /Locuiesc aici.