Lucrul cu fisiere de tip XML (Extensible Markup Language)
XML sau Extensible Markup Language este un limbaj de adnotare si reprezinta o modalitate usoara de a structura datele intr-un mod ierarhic si usor de inteles. Aceste date sunt stocate in fisiere text cu extensia .xml
Ne vom folosi de clasa URLLoader pentru a incarca un fisier XML, in cazul nostru un feed RSS (familie de formate de fluxuri web, specificate in XML si folosite pentru Web syndication).
import mx.collections.ArrayCollection;
private var xmlLoader:URLLoader;
private var xmlData:XML;
private function LoadXML():void
{
xmlData = new XML();
var url:String = "http://ilearn.ro/taxonomy/term/9/0/feed";
xmlLoader = new URLLoader(new URLRequest(url));
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
}
private function xmlLoaded(event:Event):void
{
trace(event.target.data); // afiseaza xml-ul
}
ActionScript 3.0 include un grup de clase (XML, XMLList, QName si Namespace) bazat pe ECMAScript pentru XML cunoscute ca E4X, aceste clase includ functionalitati usor de folosit, iar codul este mult mai usor de citit si inteles.
import mx.collections.ArrayCollection;
private var xmlLoader:URLLoader;
private var xmlData:XML;
[Binbable]
private var arrListData:ArrayCollection = new ArrayCollection();
private function LoadXML():void
{
xmlData = new XML();
var url:String = "http://ilearn.ro/taxonomy/term/9/0/feed";
xmlLoader = new URLLoader(new URLRequest(url));
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
}
private function xmlLoaded(event:Event):void
{
xmlData = XML(event.target.data);
parseRSS(xmlData);
}
private function parseRSS(value:XML):void
{
var items:XMLList = value..item;
for(var i:int = 0; i< items.length(); i++)
{
arrListData.addItem({label:items[i].title, link:items[i].link});
}
}
Nu ne ramane decat sa afisam datele din arrListData intr-o componenta de tip List sau DataGrid, si eventual sa adaugam functionalitati in plus acestui "reader RSS".
Una dintre functionalitati ar putea fi doar listarea dupa un anumit autor, care este simpla si in mod normal s-ar rezolva foarte simplu cu un if.
Observam ca nodul creator are definit un Namespace si vom proceda astfel:
// declaram o veriabila de tip Namespace pentru dc
private var dc:Namespace = new Namespace("http://purl.org/dc/elements/1.1/");
si v-om adauga in functia parseRSS un if, rezultatul fiind listarea nodurilor ce indeplinesc conditia data.
private function parseRSS(value:XML):void
{
var items:XMLList = value..item;
for(var i:int = 0; i< items.length(); i++)
{
if(items[i].dc::creator == "dorin.canepa")
{
arrListData.addItem({label:items[i].title, link:items[i].link});
}
}
}
sau asa:
private function parseRSS(value:XML):void
{
var items:XMLList = value..item.(dc::creator == "dorin.canepa");
for(var i:int = 0; i< items.length(); i++)
{
arrListData.addItem({label:items[i].title, link:items[i].link});
}
}




