How to append a new node into a XML object in Flex/as3? Here's a simple example that teaches you how to append a XML node. Here's a guide on how to do it. But do take note that you have to use either _ or a letter for the first character of the name of the new node that you are trying to insert. However if you want to use numbers for the first character, there's a way to do it too. :P Besides for the ways that I have listed in this post, you can use dot notation (.) to append a new node too. :)
Source Code for the main application - 'SimpleXMLManipulation.mxml'
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="creationCompleteEvt(event)"
xmlns:local="*">
<fx:Declarations>
<local:SimpleXMLConverter id="converter"/>
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
protected function creationCompleteEvt(e:FlexEvent):void
{
converter.init();
}
]]>
</fx:Script>
<s:VGroup width="100%"
height="100%"
verticalAlign="middle"
horizontalAlign="center">
<s:Label text="Original XML"/>
<s:TextArea text="@{converter.simpleXML}"/>
<s:Spacer height="10"/>
<s:HGroup>
<s:VGroup horizontalAlign="center">
<s:Label text="Modified XML using appendChild()"/>
<s:TextArea text="{converter.simpleXML1}"
editable="false"
width="30%"
minWidth="300"/>
</s:VGroup>
<s:VGroup horizontalAlign="center">
<s:Label text="Modified XML using []"/>
<s:TextArea text="{converter.simpleXML2}"
editable="false"
width="30%"
minWidth="300"/>
</s:VGroup>
</s:HGroup>
</s:VGroup>
</s:Application>
Source code for the XML manipulating class
package
{
import flash.events.Event;
import flash.events.EventDispatcher;
[Bindable]
public class SimpleXMLConverter extends EventDispatcher
{
//XML String
private var simpleXMLString:String = "" +
" ";
//XML that contains the above simpleXMLString
private var _simpleXML:XML;
[Bindable(event="simpleXMLChanged")]
public function get simpleXML():String
{
return _simpleXML;
}
public function set simpleXML(value:String):void
{
//If the input value isn't a valid XML,
//we will set it to empty.
try
{
_simpleXML = XML(value);
}catch(e:Error)
{
_simpleXML = new XML();
}
//Modified XML using appendChild()
simpleXML1 = XML(_simpleXML.toXMLString());
if(simpleXML1)
{
var dummyXMLNode:XML;
var dummyXMLNodeStr:String;
dummyXMLNodeStr = "<" + name1Str + name2Str + ">";
dummyXMLNodeStr += valueStr;
dummyXMLNodeStr += "" + name1Str + name2Str + ">";
dummyXMLNode = new XML(dummyXMLNodeStr);
simpleXML1.appendChild(dummyXMLNode);
if(simpleXML1.level1.length() > 0)
{
for(var i:int = 0; i < simpleXML1.level1.length(); i ++)
{
simpleXML1.level1[i].appendChild(dummyXMLNode);
}
}
}
//Modified XML using []
simpleXML2 = XML(_simpleXML.toXMLString());
if(simpleXML2)
{
simpleXML2[name1Str + name2Str] =
valueStr;
if(simpleXML2.level1.length() > 0)
{
for(i = 0; i < simpleXML2.level1.length(); i ++)
{
simpleXML2.level1[i][name1Str + name2Str] =
valueStr;
}
}
}
//dispatching the 8 event to update the
//respective text area
dispatchEvent(new Event("simpleXML1Changed",
true, true));
dispatchEvent(new Event("simpleXML2Changed",
true, true));
}
//XML that contains the modified XML based
//on the above simpleXMLString and appendChild()
private var _simpleXML1:XML;
public function get simpleXML1():XML
{
return _simpleXML1;
}
[Bindable(event="simpleXML1Changed")]
public function set simpleXML1(value:XML):void
{
_simpleXML1 = value;
}
//XML that contains the modified XML based
//on the above simpleXMLString and []
private var _simpleXML2:XML;
public function get simpleXML2():XML
{
return _simpleXML2;
}
[Bindable(event="simpleXML2Changed")]
public function set simpleXML2(value:XML):void
{
_simpleXML2 = value;
}
//The name of the empty node - part1
private var name1Str:String = "empty";
//The name of the empty node - part2
private var name2Str:String = "node";
//The value of the empty node
private var valueStr:String = "dummyValue";
public function init():void
{
simpleXML = new XML(simpleXMLString);
//dispatching the event to update the main
//respective text area
dispatchEvent(new Event("simpleXMLChanged",
true, true));
}
}
}
* Click here for the demo shown in this post.^ Click here for the source files for the demo.
No comments:
Post a Comment