除了初始化构建XML对象时构建XML的内容,也可以通过XML类提供的方法在运行时动态的改变XML的内容。appendChild和prependChild两个方法就是分别在XML对象的头部以及尾部添加节点。对于一个XML对象而言必须得有一个根节点。添加的操作必须作用在根节点之上。使用appendChild添加节点方式如下代码所示。
var flexXML:XML=<RIA></RIA>
var flexXML1:XML= <FlashPlayer>
<Flash>Flash CS3</Flash>
<Flex>Flex3</Flex>
</FlashPlayer>
var flexXML2:XML= <Ajax>
<GoogleAjax>GoogleAjax1.0</GoogleAjax>
</Ajax>
flexXML=flexXML.appendChild (flexXML1); //添加节点
flexXML=flexXML.appendChild(flexXML2); //添加节点
trace(flexXML.toString());
上面的代码通过appendChild方法添加节点,这样每次添加的节点都在XML对象的尾部。上面代码输出如下所示。
<RIA>
<FlashPlayer>
<Flash>Flash CS3</Flash>
<Flex>Flex3</Flex>
</FlashPlayer>
<Ajax>
<GoogleAjax>GoogleAjax1.0</GoogleAjax>
</Ajax>
</RIA>
如果使用prependChild方法添加节点,代码如下所示。
var flexXML:XML=<RIA></RIA>
var flexXML1:XML= <FlashPlayer>
<Flash>Flash CS3</Flash>
<Flex>Flex3</Flex>
</FlashPlayer>
var flexXML2:XML= <Ajax>
<GoogleAjax>GoogleAjax1.0</GoogleAjax>
</Ajax>
flexXML=flexXML.prependChild (flexXML1); //添加节点
flexXML=flexXML.prependChild (flexXML2); //添加节点
trace(flexXML.toString());
使用prependChild方法添加节点,每次添加的节点都出现在XML对象的最前端。上面代码的输出结果如下所示。
<RIA>
<Ajax>
<GoogleAjax>GoogleAjax1.0</GoogleAjax>
</Ajax>
<FlashPlayer>
<Flash>Flash CS3</Flash>
<Flex>Flex3</Flex>
</FlashPlayer>
</RIA>
除了在XML对象首尾添加节点外。XML还提供两个方法insertChildAfter和insertChildBefore。通过这两个方法,可以指定节点插入的位置。insertChildAfter使用的方式如下代码所示。
var flexXML:XML=<RIA>
<FlashPlayer>
<Flash>Flash CS3</Flash>
</FlashPlayer>
<Ajax>
<GoogleAjax>GoogleAjax1.0</GoogleAjax>
</Ajax>
</RIA>
var flexXML1:XML= <Flash>Flash 8</Flash>
var flexXML2:XML= <Flash>Flash MX2004</Flash>
flexXML=flexXML.insertChildAfter(flexXML.FlashPlayer [0],flexXML1); //通过指定节点位置插入新的节点
flexXML=flexXML.insertChildAfter(flexXML.FlashPlayer [0],flexXML2); //通过指定节点位置插入新的节点
trace(flexXML.toString());
在上面的代码中通过flexXML.FlashPlayer.Flash[0]是指定节点的位置。上面代码输出如下所示。
<RIA>
<FlashPlayer>
<Flash>Flash CS3</Flash>
</FlashPlayer>
<Flash>Flash 8</Flash>
<Flash>Flash MX2004</Flash>
<Ajax>
<GoogleAjax>GoogleAjax1.0</GoogleAjax>
</Ajax>
</RIA>
可以看出insertChildAfter是在指定节点之后插入新的节点。而insertChildBefore恰恰相反,在指定节点之前插入新节点。insertChildBefore与insertChildAfter使用方式相同。如下代码所示
var flexXML:XML=<RIA>
<FlashPlayer>
<Flash>Flash CS3</Flash>
</FlashPlayer>
<Ajax>
<GoogleAjax>GoogleAjax1.0</GoogleAjax>
</Ajax>
</RIA>
var flexXML1:XML= <Flash>Flash 8</Flash>
var flexXML2:XML= <Flash>Flash MX2004</Flash>
flexXML=flexXML. insertChildBefore (flexXML.FlashPlayer [0],flexXML1); //通过指定节点位置插入新的节点
flexXML=flexXML. insertChildBefore (flexXML.FlashPlayer [0],flexXML2); //通过指定节点位置插入新的节点
trace(flexXML.toString());
上面代码输出结果如下所示。
<RIA>
<Flash>Flash MX2004</Flash>
<Flash>Flash 8</Flash>
<FlashPlayer>
<Flash>Flash CS3</Flash>
</FlashPlayer>
<Ajax>
<GoogleAjax>GoogleAjax1.0</GoogleAjax>
</Ajax>
</RIA>
每个新插入的节点都在指定节点之前。通过insertChildAfter和insertChildBefore方法可以指定任意插入节点的位置。
除了上述的改变XML对象节点的方法之外,可以直接通过“.”操作符向XML对象添加节点,使用“@”操作符添加属性。如下代码所示。
var flexXML:XML=<RIA></RIA>
flexXML.Flash=”flash CS3”; //添加Flash节点
flexXML.@name=”FlashPlayer”; //添加name属性
trace(flexXML.toString());
上面代码输出如下所示。
<RIA name=”FlashPlayer”>
<Flash>flash CS3</Flash>
</RIA>
同样,可以通过“+”和“+=”操所符构建一个XMLList对象。如下代码所示。
var flexXML:XML=<Flash>Flash MX2004</Flash>
var flexXML1:XML=<Flash>Flash 8</Flash>
var flexXML2:XML=<Flash>Flash CS3</Flash>
var flexXMLList:XMLList=flexXML+flexXML1; //连接连个XML对象构建XMLlist对象
flexXMLList+=flexXML2; //向XMLList对象添加新的节点
trace(flexXMLList.toString());
上面代码输出的结果如下所示。
<Flash>Flash MX2004</Flash>
<Flash>Flash 8</Flash>
<Flash>Flash CS3</Flash>
在ActionScript 3.0中,还可以通过“{}”操作符引用其他类型的数据。通过这种方式可以快速的通过已有数据构建XML对象的内容。具体使用方式如下代码所示。
var flexArray:Array=[“flash MX2004”,”flash 8”,”flash CS3”];
var flexXML:XML=new XML(“<RIA></RIA>”);
for(var i:int=0;i<flexArray.length;i++)
{
var flexTempXML=new XML();
flexTempXML=<Flash>{flexArray[i]}</Flash> //通过“{}”引用Array内容的数据循环添加节点
flexXML.appendChild(flexTempXML);
}
trace(flexXML);
上面代码输出的内容如下所示。
<RIA>
<Flash>flash MX2004</Flash>
<Flash>flash 8</Flash>
<Flash>flash CS3</Flash>
</RIA>