x2a v2.0

szóval tök jó hogy jön flash8.5 és jön e4x ja és milyen fasza lesz végre flashben is az xml kezelés, de ha belegondolok hasonló cumót már flash6-ban is lehetett. a lényeg annyi hogy egy rekurzív fügvénnyel az xmlt átparsoljuk egy assziciatív tömbe. plusz pár kényelmi funckió és tatam kész is amiről most szó fog esni.

az eredeti scriptet ősrégen írtam, most ime feljavitott v2.0-s verziója. de lássuk előbb miről is van szó :

ezzel könnyebb hivatkozni az xml részeire ill nyered pl az Array sortOn funkciót is amivel az xmled nodejait rendezni tudod adott property pl nodename vagy attrib értéke alapján.

elöször is pár fix dolog : ime a teszt xmlünk. a példákat ezeken mutatom be:

cél hogy a betöltött xml nodejait indexelve és név szerint is elérjem. mivel tömbről van szó ezért ez valahogy igy fog kinézni : <code lang=”Actionscript””> trace(t.a) // ez ua mint t[a] ugyebár //vagy pl trace(t[0]) // mindkét esetben megkapom a nodeunkat</code>

most pedig itt van pár alkalmazott jelőlő:

ja még valami : mivel most már arrayunk van a flashes Array.sortOn funkciót használhatjuk nagy boldogan. ez a sortOn arra való hogy ha van pl egy tömbünk amiben minden tömb ellemnek van azonos propertyje, tehát pl a tömb ellemei objectek vagy asszocíativ tömbök akkor ezekre a propertikre sorba tudjuk rendezni a tömbünket. lássunk egy példát. xmlünk nodejait szeretnénk rendezni város név alapján. tehát nodejaink city attribje alapján. mint mondtam az attribot eléred igyis : _attribneve tehát esetünkben a szükséges property a _city. lássuk :

t.sortOn("_city") //rendezés megvolt for(c=0;c<t.length;c++){trace(t[c].$)} //kiírtuk na erre ezt kapjuk :

</code> tehát a nodejaink sorrendje a város attrib alapján alakult.

van mód flash8ban tőbb, másodlagos harmadlaogs etc kulcsok megadására a sortOn funkcióban. tehát pl minden további nélkül mükszik ez is : t.sortOn(["_city","_p"]) ez esetben ha a város név ua a nodeokban akkor a p attrib alapján rendezi azon belül öket. juhé. de mondom ez csak flash8ban megy már.

pár szóval a tipus kezelésről. valami minimálisról van csak szó. ha megnézed a test xmlünk t nodeját látod csomó attribja van. kis scriptünk ezek tipusait átalakitja számunkra, természetessen nem az attrib neve, hanem értéke alapján. nem csalunk :) pl : for (c in t._){ trace(c+" : "+t._[c]+" ("+typeof(t._[c])+")"); } outputja : str : string i am (string) hexa : 12961450 (number) numb : 123456 (number) bool : true (boolean) tehát mint látjuk minden typeof számunkra kedvező értéket adott mert pl ha egy false stringet viszgálunk az alap esetben átvert volna minket hiszen trace("false"?true:false) outputja true mivel stringként kezelte. na ezért kell tipusokkal foglalkoznunk ha már átparsoljuk szerencsétlen xmlt.

pár dolog amit fontos leszögezni: ez csak lekérdezésre jó, tehát nem alkalmas xml létrehozására vagy annak szerkesztésére, csak annak lekérdezését könyití meg.

ja a lényeg lemaradt, itt van a script amiről szó van: x2a=function(x){ var a=[];a.$=x;a._=[];a._$=x.nodeName; for(var c in x.attributes){var $=x.attributes[c]; a["_"+c]=a._[c]=!isNaN($)?Number($):$=="true"?true:$=="false"?false:$} for(var c=0;c<x.childNodes.length;c++){var n=x.childNodes[c] a[c]=a[n.nodeName]=n.nodeType==1?x2a(n):n.toString()} return a }

ennyi összvissz. használni így érdemes :t=x2a(test_xml.firstChild)

fakultatív házifeladat hogy írd át javascriptre ha akarod, mivel e4x csak firefoxban van egyenlőre szóval lehetne használni az 5letet javascript környezetben is. ajax protoba jól jönne pl.

hát ennyi. ez hosszú volt. egészségünkre.