Tuesday, July 28, 2009

Refining the trace statements to get selected tags from XML




In this tutorial we will try and get going with the xml file that we have just loaded in to our flash environment and do some combinations to know how things go.

You can always refer the first part of this series to know how we loaded the xml file and traced out the xml content to the output window. Now we are getting the raw data in the output window in xml format. Now we will try to get a few specific tags being listed and also try out some conditions.

The first part code is here:

var xmlLoader:URLLoader = new URLLoader();

var urlRequest:URLRequest = new URLRequest("schoolXML.xml");
xmlLoader.addEventListener(Event.COMPLETE, xmlLoadedFunc);

xmlLoader.load(urlRequest);

var schoolXML:XML = new XML();
schoolXML.ignoreWhitespace = true;

function xmlLoadedFunc (evt:Event):void{

schoolXML = XML(xmlLoader.data);
trace (schoolXML);

}

Now we will play around with the previous code.

function xmlLoadedFunc (evt:Event):void{
schoolXML = XML(xmlLoader.data);
trace (schoolXML.student.name);
}

Here, I have just changed the trace statement a little. I have added ".student.name” which now tells the compiler that we are not looking for the complete data but just the data in name which is under student tag which is actually inside the xml file. So if we do this, we can see the list of students. But even now we can see the data in xml tags.

If we like to look at any specific item number then even we can do that. We just have to remember that in the variable all the xml data is stored in the form of array. And so if we have to call any particular data from xml then we have to use the syntax that we use to call data in arrays. And always the numbering starts from 0. So let’s say I want to see the details of the student in the 4th tag. To do this, I have to understand that the record should be stored in array number 3. So I will modify the last statement to something like this

function xmlLoadedFunc (evt:Event):void{
schoolXML = XML(xmlLoader.data);
trace (schoolXML.student.name[3]);
}

And we can get the desired output.

Now let’s get into more realistic situations. Like want to see how many students scored marks less than 40. May be they will need extra care and so I want to list out the names. So for this, we have to use conditions to get the desired output. Well it may sound a bit difficult, but let me tell you its very easy. As if you are talking to the computer and it will understand the same instruction.

trace (schoolXML.student.(percentage < 50));

yes, this is the trace statement in the function which will give us the desired output. Like if you are using the same xml that I am using then you will get a list of only two students who scored less than 50.

In this trace statement the instruction is very simple, we are asking to trace the records in schoolXML.student and then in the percentage we are giving the condition and that is why we have it inside the brackets.

Saturday, July 25, 2009

Loading XML data into Flash through AS 3.0

Hi, this is my first tutorial and so I will start with a very basic tutorial on how to load xml data into flash using action script 3.0. with E4X, it is very easy to deal with xml data if we compare to the previous version.

So without wasting time, lets get started. I am using an xml file which I have created for a dummy school and I have entered data for 10 students.

As we are only going to load the xml data in to the flash environment, I am not explaining too much about the xml structure and the details cause I want to keep this one real quick and simple.

var xmlLoader:URLLoader = new URLLoader();
var urlRequest:URLRequest = new URLRequest("schoolXML.xml");

Here we declare two variables. The first one is xmlLoader which is an “URLLoader”. And the second is urlRequest which is where we will store the url for the xml file. Var is a keyword used to tell the compiler that we are declaring a variable. Then we write the name of the variable which in this case is xmlLoader and urlRequest. URLLoader and URLRequest are classes in flash with specific function. URLLoader loads data from the url, and URLRequest is used to pass a url path.

The next part is where we define an event listener. This is where flash understands that the data in the variable is loaded and it acts as instructed when the event listener is triggered. In this case, we are instructing the event listener to run a function which will do a certain set if instruction.

xmlLoader.addEventListener(Event.COMPLETE, xmlLoadedFunc);

But the event will not be triggered until the load is complete. And loading will not start until we give the command to load the data. So we instruct the complier to load the data.

xmlLoader.load(urlRequest);

before going to the function we do write a piece of code to declare a variable where we would like to keep all the xml data which will be loaded and also we set one property of the xml variable called ignoreWhitespace to true. This is active by default. But it is a good habbit to define that mannualy so that we are sure of the same. This is done because when we make the XML file, we tend to format them using a lot of tabs and spaces. But those tabs and spaces are just for visual reference and they are not important from the data point of view. So when we set the ignoreWhitespace property to true, all those spaces are taken care of automatically.

var schoolXML:XML = new XML();
schoolXML.ignoreWhitespace = true;

and then finally we write the function. The name of the function is already declared when we were defining the event listener.

function xmlLoadedFunc (evt:Event):void{
schoolXML = XML(xmlLoader.data);
trace (schoolXML);
}

In this function we define that the variable schoolXML will have XML kind of data from will come from the variable xmlLoader’s data property. And then finally we trace out schoolXML to see that all the xml data is beign traced out in the output window.

Get the xml file here