A Flash Developer Resource Site

Results 1 to 4 of 4

Thread: Accessing xml date from subclass

  1. #1
    Member
    Join Date
    Apr 2001
    Location
    Cape Town
    Posts
    99

    Accessing xml date from subclass

    I am building a app that pulls data from xml. The different nodes in the xml needs to build different objects. My thinking was that I must import the xml only once. Then build seperate classes for each object type. These classes will extends the xml class and apply whatever it needs to do with specific nodes data.

    Problem is that it seems like the subclass is created before the xml loaded. I can trace the xml data from the xml superclass but not from the subclass.

    Main Class
    Actionscript Code:
    package MyClasses
    {

        import flash.display.Sprite;
        import MyClasses.Dateline;

        public class Main extends Sprite
        {
            private var dateLine;

            public function Main()
            {
                dateLine==new(Dateline);

            }

        }

    }

    Xml super class
    Actionscript Code:
    package MyClasses
    {
        import flash.display.*
        import flash.display.Loader;
        import flash.xml.*;
        import flash.events.Event;
        import flash.net.URLLoader;
        import flash.net.URLRequest;
        //read xml

        public class Xml
        {
            public var myXML:XML;
            var xmlLoader:URLLoader = new URLLoader();
            public function Xml()
            {
               
                xmlLoader.load(new URLRequest("../../assets/xml/data.xml"));
                xmlLoader.addEventListener(Event.COMPLETE, processXML);

            }
            function processXML(e:Event):void
            {
                xmlLoader.removeEventListener(Event.COMPLETE, processXML);
                myXML = new XML(e.target.data);
                myXML.ignoreWhite = true;
                trace(myXML)
            }

        }

    }

    subClass
    Actionscript Code:
    package MyClasses
    {

        //create dateline
        import flash.display.MovieClip
        import flash.display.Sprite;
        import MyClasses.Xml;

        public class Dateline extends Xml
        {
            public var dataHolder:String

            public function Dateline()
            {
                trace(myXML)
            }

        }

    }

  2. #2
    Senior Member
    Join Date
    Jan 2011
    Posts
    171
    What is the XML structure?

    Or the sample of it.



    arkitx

  3. #3
    Member
    Join Date
    Apr 2001
    Location
    Cape Town
    Posts
    99
    I was thinking, maybe I need a customEvent in the xml class and listener in the subclass. not sure how to do that.

    well below is the xml. It is in folder structure, assets/xml

    <?xml version="1.0" encoding="UTF-8"?>

    <main >
    <item>
    <startdate>1920</startdate>
    <enddate>1950</enddate>
    </item>
    </main>

  4. #4
    Senior Member
    Join Date
    Jan 2011
    Posts
    171
    There are lots of ways to do this. But I assume this will be the simplest one to understand. maybe....

    Actionscript Code:
    package classes{
        import flash.display.MovieClip;
        import flash.net.URLRequest;

        public class Main extends MovieClip {
            private var req:URLRequest;
            private var xml:XMLReader;
            private var dateLine:DateLine;

            public function Main() {
                req=new URLRequest("assets/xml/data.xml");
                xml=new XMLReader();
                dateLine=new DateLine(xml);
                xml.load(req);
            }
        }
    }

    Actionscript Code:
    package classes{
        import flash.events.Event;
        import flash.events.EventDispatcher;
        import flash.net.URLLoader;
        import flash.net.URLRequest;
        import flash.xml.XMLDocument;

        public class XMLReader extends EventDispatcher {
            private var xmlLoader:URLLoader;
            public var myXML:XML;
            public var dates:XMLList;
            public var startDate:String;
            public var endDate:String;
            public function XMLReader() {
                xmlLoader=new URLLoader();
            }
            public function load(evt:URLRequest):void {
                xmlLoader.load(evt);
                xmlLoader.addEventListener(Event.COMPLETE,xmlLoaded);
            }
            private function xmlLoaded(evt:Event):void {
                myXML=new XML(evt.target.data);
                dates=myXML.item;
                dispatchEvent(new Event(Event.COMPLETE));
            }
        }
    }

    Actionscript Code:
    package classes{
        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.net.URLRequest;
        import flash.utils.getDefinitionByName;
        import flash.utils.getQualifiedClassName;

        public class DateLine {
            private var dateHolder:XMLList;

            public function DateLine(xml) {
                xml.addEventListener(Event.COMPLETE,xmlLoaded);
            }
            private function xmlLoaded(evt:Event):void {
                dateHolder=evt.target.dates;           
                evt.target.startDate=dateHolder[0].startdate;
                evt.target.endDate=dateHolder[0].enddate;
                //---------------------------------------------------//
                trace(evt.target.myXML+"\n---------------");
                trace("Class "+getQualifiedClassName(this).split("::")[1]+"\tdateHolder\t=\t"+dateHolder[0].startdate);
                trace("Class "+getQualifiedClassName(evt.target).split("::")[1]+"\tstartDate\t=\t"+evt.target.startDate);
                trace("Class "+getQualifiedClassName(evt.target).split("::")[1]+"\tendDate\t\t=\t"+evt.target.endDate);
                //---------------------------------------------------//
            }
        }
    }




    arkitx

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  




Click Here to Expand Forum to Full Width

HTML5 Development Center