joi, iunie 29, 2017

Clasa pentru citit XML-uri in flash (AS2)

Lucrez de 5 ani de zile pe flash – actionscript, timp in care am invatat gramezi de la altii. Mi-a trecut de multe ori prin cap sa „intorc” ceva comunitatii care m-a ajutat sa-mi castig painea, dar din diverse motive de lene si timp n-am facut-o, inca. Unul din cele mai des folosite lucruri in flash (parerea mea), este XML-ul. Mereu trebuie sa incarci cate o configuratie, o setare, un text extern pentru a putea face un site / joc in 2 limbi, samd. Sau pur si simplu pentru a nu recomplica fla-ul atunci cand se schimba un textulet.

So, here goes, un tool pentru a citi si parsa XML-uri.

O sa explic intai cum se foloseste, si dupa o sa dau detalii despre cum e structurata clasa.
Se pleaca de la un XML, cu un singur nivel. Atributele esentiale sunt „id”, si „body”. restul sunt optionale

Codu de parsare este extrem de simplu. se foloseste functia find, cu 2 parametri. primul este id-ul nodului, si al 2-lea atributul care ne trebuie

 

xmlr = new XMLReader(); // instantiem clasa
xmlr.init('blabla.xml'); // ii spunem ce sa incarcefunction
function onEnterFrame() {
	if (xmlr.getStatus() != false)  {
		trace('XMLReader initializat');
		trace('--------');
		trace('id1 - body (implicit): ' +  xmlr.find('id1'));
		trace('id1 - attr1: ' + xmlr.find('id1', 'attr1'));
		trace('id1 - attr2 (nu exista): ' + xmlr.find('id2', 'attr2'));
		trace('id5 - (nu exista): ' + xmlr.find('id5'));
		delete onEnterFrame;
	}
}

 

Asta-i tot. In continuare o arhiva cu sursele.
XMLReader.rar

 

class XMLReader {
	// declaratiile de variable.
	private var init_status:Boolean; // init_status spune daca s-a incarcat xml-ul.
	private var texte:Array = new Array(); // locul in care se tine xml-ul parsat, ca obiecte
	private var my_xml:XML; 

	// costructor gol
	function XMLReader () {
	}

	public function init(argument:String) {
		init_status = false;
		my_xml = new XML();
		var rootnode;
		my_xml.ignoreWhite = true;
		my_xml.load(argument);
		var parinte = this;

		my_xml.onLoad = function(succes) {
			if (succes) {
				parinte.init_status = true;
				rootnode = this.firstChild.childNodes;
				for (var i=0; i<rootnode.length; i++) {
					var o = new Object();
					o.id = rootnode[i].attributes['id'];
					for (var j in rootnode[i].attributes) {
						o[j] = rootnode[i].attributes[j];
					}
					parinte.texte.push(o);
				}
				texte.sortOn("id");
				return(true);
			} // end if succes
			else {
				return(false);
			}
		}
	}

	public function getStatus() {
		return(init_status);
	}

	public function find (id:String, attribute:String) {
		if (arguments.length == 0) {
			trace('XMLReader error: xml-ul nu a fost initializat');
			return(false);
		}
		if (arguments.length == 1) {
			// nu avem atributul, deci implicit va fi "body"
			attribute = 'body';
		}

		if (init_status != true) {
			trace('XMLReader error: xml-ul nu a fost initializat');
			return(false);
		}
		for (var i=0; i<texte.length; i++) {
			var o = texte[i];
			if (o.id == id) {
				if (o[attribute] == undefined) {
					trace('XMLReader error: elementul cu id-ul ' + id + ' nu are niciun atribut ' + attribute);
					return(false);
				}
				return o[attribute];
			}
		}

		trace('XMLReader error: id-ul cautat nu exista');
		return(false);
	}
}

 

Stiu ca utilitatea acestui „programel” este fix zero pentru 99% dintre cititori, insa pentru restul de 1% poate face o diferenta enorma. go flasheri

2 Comentarii

  1. Salut.

    AS 3 ai incercat? Eu acum m-am apucat de AS 3 si e cam aiurea :)).

    Ti-am mai citit posturile. GG. Si eu ma plimb recent cu bicicleta si lucrez flash la o firma. :)

    See ya.

  2. Apropo. Poti sa folosesti SharedObject in Flash pentru setari si chestii din astea. Nu ai nevoie de XML. E ca un cookie si poti sa faci chestii simple pe care sa le tina minte: setari de meniu, limba, etc.

    SharedObjectul se creaza simplu unde e downloadat flash-ul, in cache-ul tau, si tine minte ce ii stochezi in variabile. E super simplu si util.

Lasa un comentariu

Adresa de email nu va fi afisata. Required fields are marked *

*

Poți folosi aceste etichete și atribute HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Scroll To Top