XML

Intrebari despre Actionscript 3.0

XML

Mesajde myth » Vin Iul 15, 2011 10:43 pm

sal.. am urmatorul xml cu structura tag-urilor:
Cod: Selectaţi tot
<content>
  <section>
    <page>
        <title></title>
        <pic></pic>
        <text1></text1>
    </page>
    <page>
        <text1></text1>
        <pic></pic>
        <text1></text1>
    </page>
  </section>
</content>

problema ii ca la al 2-lea tag <page> imi concateneaza primul text1 cu al 2-lea...

modalitatea prin care parcurg xml-ul:
Cod: Selectaţi tot
var inf:XML = new XML(e.target.data);
var i,j,k:int;
for (i=0;i<=inf.section.length()-1;i++)
   {
                  for (j=0;j<=inf.section[i].page.length()-1;j++)
                     {
                        if (inf.section[i].page[j].title!=undefined)
                           {
                              contents.push(inf.section[i].page[j].title.text());
                              types.push(0);
                              sections.push(i);
                              pages.push(j);
                           }
                        if (inf.section[i].page[j].text1!=undefined)
                           {
                              contents.push(inf.section[i].page[j].text1.text());
                              types.push(1);
                              sections.push(i);
                              pages.push(j);
                           }
                        if (inf.section[i].page[j].text2!=undefined)
                           {
                              contents.push(inf.section[i].page[j].text2.text());
                              types.push(2);
                              sections.push(i);
                              pages.push(j);
                           }
                        if (inf.section[i].page[j].pic!=undefined)
                           {
                              contents.push(inf.section[i].page[j].pic.text());
                              types.push(3);
                              sections.push(i);
                              pages.push(j);
                           }
                      }


stiti cum pot sa iau separat texturile din cele 2 taguri?
myth
 
Mesaje: 51
Membru din: Lun Mai 04, 2009 5:23 pm

Re: XML

Mesajde Barna Biro » Sâm Iul 16, 2011 3:20 am

Eu as face ceva asemanator cu chestia urmatoare ( e doar un exemplu ):

Cod: Selectaţi tot
package
{
    import flash.display.Sprite;
   
    public class XMLExample extends Sprite
    {
        private var _xmlData:XML =
            <content>
              <section>
                <page>
                    <title>SomeTitle1</title>
                    <pic>/images/pic1.jpg</pic>
                    <text1>SomeText1</text1>
                </page>
                <page>
                    <text1>SomeText2</text1>
                    <pic>/images/pic2.jpg</pic>
                    <text1>SomeText3</text1>
                </page>
              </section>
            </content>;
       
        public function XMLExample()
        {
            var pageDataList:Vector.<PageData> = extractPageDataFromXML(_xmlData);
            var pageData:PageData;
           
            // Trace out each extracted page information.
            for each (pageData in pageDataList)
            {
                trace("----------------------------------");
                trace("page title: " + pageData.title);
                trace("page picture: " + pageData.picture);
               
                var text:String;
               
                for each (text in pageData.texts)
                {
                    trace("text: " + text);
                }
            }
        }
       
        private function extractPageDataFromXML(xml:XML):Vector.<PageData>
        {
            var result:Vector.<PageData> = new Vector.<PageData>();
           
            var pageXmlList:XMLList = _xmlData..page;
            var pageInfo:XML;
            var pageData:PageData;
           
            for each (pageInfo in pageXmlList)
            {
                pageData            = new PageData();
                pageData.title      = pageInfo.title.toString();
                pageData.picture    = pageInfo.pic.toString();
               
                var textXmlList:XMLList = pageInfo..text1;
                var textInfo:XML;
               
                for each (textInfo in textXmlList)
                {
                    pageData.texts.push(textInfo.toString());
                }
               
                result.push(pageData);
            }
           
            return result;
        }
    }
}

internal class PageData
{
    public var title:String;
    public var picture:String;
    public var texts:Array = new Array();
}

Daca nu imi era lene ( e totusi 4:21 AM ), as fi facut o clasa separata pentru PageData si as mai fi facut mici tweak-uri. Ideea e sa incerci sa extragi, grupezi si sa stochezi valorile din structura ta XML in asa fel incat, in final sa ai o structura cu care poti lucra mult mai usor.

EDIT: http://livedocs.adobe.com/flex/3/html/h ... ML_01.html Cisteste articolele despre XML ( sunt mai multe ) si vezi cum iti poate usura e4x viata ( ignora faptul ca titlul zice despre "Flex" ).
Imagine
Avatar utilizator
Barna Biro
Administrator
 
Mesaje: 2037
Membru din: Vin Iul 25, 2008 1:06 am
Localitate: Lucerne, Switzerland

Re: XML

Mesajde myth » Sâm Iul 16, 2011 1:29 pm

mersi de raspuns.
initial am vrut sa fac numai cu functii dar la codul scris de tine este si aceea clasa interna PageData si nu stiu cum s-o rescriu ca vad ca nu este tipul struct in as3; asa ca am incercat sa las codul asa si am salvat intr-un fisier .as, i-am dat import la package si cand instantiez clasa XMLExample imi zice ca n-o gaseste

am fisierul xml.as (aflat in directorul "classes")
Cod: Selectaţi tot
package classes
    {
        import flash.display.Sprite;
       
        public class XMLExample extends Sprite
        {
...
        }
.....
}


in fla am scris
Cod: Selectaţi tot
import classes.*;
var asd:XMLExample=new XMLExample();


si erorile care le primesc
Cod: Selectaţi tot
Symbol 'Symbol 14', Layer 'as', Frame 1, Line 11   1046: Type was not found or was not a compile-time constant: XMLExample.
Symbol 'Symbol 14', Layer 'as', Frame 1, Line 11   1180: Call to a possibly undefined method XMLExample.

si faza ii ca la autocomplete imi apare in lista clasa... ce nu fac bine?
myth
 
Mesaje: 51
Membru din: Lun Mai 04, 2009 5:23 pm

Re: XML

Mesajde Barna Biro » Sâm Iul 16, 2011 1:32 pm

Uploadeaza un .zip cu toate sursele... cred ca e mai usor decat sa incep sa dau cu banul.
Nu stiu cum ai modificat exact ceea ce am postat ( am o presimtire, dar mai bine vad ce ai ).

PS: XMLExample trebuia setat ca si Document Class pentru .fla-ul tau.
Imagine
Avatar utilizator
Barna Biro
Administrator
 
Mesaje: 2037
Membru din: Vin Iul 25, 2008 1:06 am
Localitate: Lucerne, Switzerland

Re: XML

Mesajde myth » Sâm Iul 16, 2011 1:41 pm

aici
Fişiere ataşate
asd.zip
(6.56 KiB) Descărcat de 191 ori
myth
 
Mesaje: 51
Membru din: Lun Mai 04, 2009 5:23 pm

Re: XML

Mesajde Barna Biro » Sâm Iul 16, 2011 1:42 pm

Clasa PageData poti s-o scoti din XMLExample:

Cod: Selectaţi tot
package
{
    import classes.PageData;
   
    import flash.display.Sprite;
   
    public class XMLExample extends Sprite
    {
        private var _xmlData:XML =
            <content>
              <section>
                <page>
                    <title>SomeTitle1</title>
                    <pic>/images/pic1.jpg</pic>
                    <text1>SomeText1</text1>
                </page>
                <page>
                    <text1>SomeText2</text1>
                    <pic>/images/pic2.jpg</pic>
                    <text1>SomeText3</text1>
                </page>
              </section>
            </content>;
       
        public function XMLExample()
        {
            var pageDataList:Vector.<PageData> = extractPageDataFromXML(_xmlData);
            var pageData:PageData;
           
            // Trace out each extracted page information.
            for each (pageData in pageDataList)
            {
                trace("----------------------------------");
                trace("page title: " + pageData.title);
                trace("page picture: " + pageData.picture);
               
                var text:String;
               
                for each (text in pageData.texts)
                {
                    trace("text: " + text);
                }
            }
        }
       
        private function extractPageDataFromXML(xml:XML):Vector.<PageData>
        {
            var result:Vector.<PageData> = new Vector.<PageData>();
           
            var pageXmlList:XMLList = _xmlData..page;
            var pageInfo:XML;
            var pageData:PageData;
           
            for each (pageInfo in pageXmlList)
            {
                pageData            = new PageData();
                pageData.title      = pageInfo.title.toString();
                pageData.picture    = pageInfo.pic.toString();
               
                var textXmlList:XMLList = pageInfo..text1;
                var textInfo:XML;
               
                for each (textInfo in textXmlList)
                {
                    pageData.texts.push(textInfo.toString());
                }
               
                result.push(pageData);
            }
           
            return result;
        }
    }
}

Cod: Selectaţi tot
package classes
{
    public class PageData
    {
        public var title:String;
        public var picture:String;
        public var texts:Array = new Array();
    }
}

Din moment ce XMLExample ar trebui sa fie Document Class-ul, personal, l-as lasa pe acelasi nivel cu .fla-ul tau... dar daca chiar doresti, poti sa-l bagi si in pachetul "classes" sau altundeva.
Imagine
Avatar utilizator
Barna Biro
Administrator
 
Mesaje: 2037
Membru din: Vin Iul 25, 2008 1:06 am
Localitate: Lucerne, Switzerland

Re: XML

Mesajde Barna Biro » Sâm Iul 16, 2011 1:48 pm

Uite aici fisierele modificate. Vad ca nu ai prea lucrat cu clase pana acuma in ActionScript 3.0.
Citeste pe aici: http://www.adobe.com/devnet/flash/quick ... s_as3.html si http://digitalmedia.oreilly.com/helpcen ... pter2.html

.fla-ul l-am salvat pentru Flash CS4 ( am doar CS 5.5 instalat si nu ai mentionat ce versiune folosesti... in general, nu ma ating de Flash IDE - ultima oara cand am lucrat "mai serios" in el a fost cam acu 3 ani - si din cauza asta, exemplele pe care le postez constau intr-o clasa principala, pe care ba trebuie s-o setezi ca si Document Class pentru .fla-ul tau, ba sa faci un ActionScript 3.0 Project folosind Flex / Flash Builder si sa setezi acea clasa ca fiind "main application file" pentru proiectul tau - sau, daca te crezi curajos, poti sa compilezi treaba direct cu compilatorul, folosind linia de comanda )

asd_EDIT.zip
(6.49 KiB) Descărcat de 210 ori

EDIT: Oricum, nu este obligatoriu sa mergi pe varianta exemplului meu... citeste despre XML si e4x si sigur o sa poti sa de tescurci si singur ( organizandu-ti lucrurile asa cum ti se pare tie mai usor ).
Imagine
Avatar utilizator
Barna Biro
Administrator
 
Mesaje: 2037
Membru din: Vin Iul 25, 2008 1:06 am
Localitate: Lucerne, Switzerland

Re: XML

Mesajde myth » Sâm Iul 16, 2011 2:29 pm

trebuia sa mai schimb din Sprite in MovieClip ca nu-mi gasea metoda addFrameScript... acuma merge bine :)
myth
 
Mesaje: 51
Membru din: Lun Mai 04, 2009 5:23 pm

Re: XML

Mesajde myth » Dum Iul 17, 2011 1:11 am

in exemplul scris de tine nu puteam memora si ordinea componentelor care apar in xml, asa ca eu le introduc toate in acelasi array dar imi mai trebuie un array cu tipul lor... cum pot afla tag-urile lor?
Cod: Selectaţi tot
                        var pageXmlList:XMLList = _xmlData..page;
         var pageInfo:XML;
         var pageData:PageData;
         
         for each (pageInfo in pageXmlList)
         {
            pageData            = new PageData();
            
            var contXmlList:XMLList = pageInfo.children();
            var contInfo:XML;
            
            for each (contInfo in contXmlList)
            {
                                        //cum stiu ce tag are componenta curenta aici?
               pageData.contents.push(contInfo.toString());
            }
            
            result.push(pageData);
         }
myth
 
Mesaje: 51
Membru din: Lun Mai 04, 2009 5:23 pm

Re: XML

Mesajde myth » Dum Iul 17, 2011 4:48 pm

am rezolvat... metoda era localName()
myth
 
Mesaje: 51
Membru din: Lun Mai 04, 2009 5:23 pm

Următorul

Înapoi la ActionScript 3.0

Cine este conectat

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 2 vizitatori

cron