第八、附加节点 appendChild 函数 通过本节将上一节创建的附加到XML对象上。
var myXML:XML=new XML(); var myTextArea:mx.controls.TextArea; var elem_1:XMLNode=myXML.createlement("总类"); var elem_2:XMLNode=myXML.createlement("食品类"); var elem_3:XMLNode=myXML.createlement("饮料类");
myXML.appendChild(elem_1); elem_1.appendChild(elem_2) elem_1.appendChild(elem_3);
myTextArea.text=myXML.toString();
--------------------------------------------------------------------------------------------
第九、创建文本 createTextNode 函数 上面我们创建了节点,但“食品类”“饮料类”为空。这节我们给节点创建文本节点值。
var myXML:XML = new XML(); var myTextArea:mx.controls.TextArea; var elem_1:XMLNode = myXML.createElement("总类"); var elem_2:XMLNode = myXML.createElement("食品类"); var elem_3:XMLNode = myXML.createElement("饮品类"); myXML.appendChild(elem_1); elem_1.appendChild(elem_2); elem_1.appendChild(elem_3);
var elem_4:XMLNode = myXML.createTextNode("哈密瓜"); var elem_5:XMLNode = myXML.createTextNode("咖啡");
elem_2.appendChild(elem_4); elem_3.appendChild(elem_5);
myTextArea.text = myXML.toString();
----------------------------------------------------------------------------------------- 第十、插入新节点 insertBefore 本节学习如何插入节点,他的标准写法为 myXML.insertBefore(insertPoint:XMLNode,newNode:XMLNode); 它带有两个参数:insertPoint和newNode,它们的作用是将newNode节点插入到XML对象的 子级列表中,且在insertPoint节点之前,如果insertPoint不是XMLNode对象的子级,插入失败。
var myXML:XML = new XML(); var myTextArea:mx.controls.TextArea; var elem_1:XMLNode = myXML.createElement("总类"); var elem_2:XMLNode = myXML.createElement("食品类"); var elem_3:XMLNode = myXML.createElement("饮品类"); myXML.appendChild(elem_1); elem_1.appendChild(elem_2); elem_1.appendChild(elem_3);
var elem_4:XMLNode = myXML.createTextNode("哈密瓜"); var elem_5:XMLNode = myXML.createTextNode("咖啡");
elem_2.appendChild(elem_4); elem_3.appendChild(elem_5); /*--------------------------------------------------------------------------- 下面我们首先声明insertPoint为根节点的最后一个子节点。即咖啡节点,之所以这么做 是想把insertPoint作为,insertBefore函数的第二个参数。定位之后,我们又创建了一个新的 节点值newNode 最后我们把这个节点值插入。 -----------------------------------------------------------------------------*/
var insertPoint:XMLNode = myXML.firstChild.lastChild ;
var newNode:XML = new XML("<模型类>高达模型</模型类>"); myXML.firstChild.insertBefore(newNode, insertPoint);
myTextArea.text = myXML.toString();
/*输出为: <总类> <食品类>哈密瓜</食品类> <模型类>高达模型</模型类> <饮品类>咖啡</饮品类> </总类> */
---------------------------------------------------------------------------------------------- 第十一、克隆节点 cloneNode 函数
它的标准写法是:XMLNode.cloneNode(deep);它的作用是构造并返回一个类型、名称、值和属性与指定的XML对象均相同的新XML节点。如果将deep设置为true.则利用递归的方法克隆所有子节点。这样我们将得到一个和原始对象文件树,完全相同的副本。如果deep参数设置为false,或者XMLNode节点没有子节点,则只克隆当前节点。例:
var myXML:XML = new XML(); var myTextArea:mx.controls.TextArea; var elem_1:XMLNode = myXML.createElement("总类"); var elem_2:XMLNode = myXML.createElement("食品类"); var elem_2_1:XMLNode = myXML.createElement("烧烤类"); var elem_3:XMLNode = myXML.createElement("饮品类"); myXML.appendChild(elem_1); elem_1.appendChild(elem_2); elem_1.appendChild(elem_3); elem_2.appendChild(elem_2_1);
var elem_4:XMLNode = myXML.createTextNode("烤牛肉"); var elem_5:XMLNode = myXML.createTextNode("咖啡");
elem_2_1.appendChild(elem_4); elem_3.appendChild(elem_5);
var insertPoint:XMLNode = myXML.firstChild.lastChild ;
var newNode:XML = new XML("<模型类>高达模型</模型类>"); myXML.firstChild.insertBefore(newNode, insertPoint);
var CL_false:XMLNode = elem_2.cloneNode(false); var CL_true:XMLNode = elem_2.cloneNode(true);
myXML.firstChild.appendChild(CL_false); myXML.firstChild.appendChild(CL_true);
myTextArea.text = myXML.toString();
---------------------------------------------------------------------------------------------
第十二、删除节点:removeNode 函数 它的标准写法是: XMLNode.removeNode(); 这个函数的作用是从指定XML对象的父级中删除该对象,此外还将删除此节点下的所有子级节点。 注意:这个函数只能在FLash中删除节点,不能对外部的XML文档产生影响。例:
var myXML:XML = new XML(); myXML.ignoreWhite = true; var myTextArea:mx.controls.TextArea; myXML.onLoad = function(success:Boolean):Void { if (success) { var delNode:XMLNode = this.firstChild.lastChild; delNode.removeNode(); myTextArea.text = myXML.toString(); } else { myTextArea.text = "some errors..."; } }; myXML.load("goods.xml");
-------------------------------------------------------------------------------------------- 第十三、是否拥有子节点 hasChildNodes 函数
在我们操作XML对象的时候,有时需要事先判断某个节点是否拥有子节点,实现这个效果可以用本节的 hasChildNodes 函数,它能够判断指定XML对象是否拥有子节点,并返回一个布尔值
var myXML:XML = new XML(); myXML.ignoreWhite = true; var myTextArea:mx.controls.TextArea; myXML.onLoad = function(success:Boolean):Void { if (success) { var money_Node:XMLNode = this.firstChild.lastChild; var pencil_Node:XMLNode = money_Node.previousSibling.firstChild; myTextArea.text += "铅笔数目:"; myTextArea.text += pencil_Node.toString(); myTextArea.text += "\t是否有子节点:"; myTextArea.text += pencil_Node.hasChildNodes().toString(); myTextArea.text += "\n\n"; myTextArea.text += "金额节点:"+money_Node.toString(); myTextArea.text += "\t是否有子节点:"; myTextArea.text += money_Node.hasChildNodes().toString(); } else { myTextArea.text = "some errors..."; } }; myXML.load("goods.xml");
--------------------------------------------------------------------------------------------- 附:good.xml文件内容
<?xml version="1.0" encoding="utf-8"?> <进货数据> <钢笔 颜色="蓝色" 质地="金属">6</钢笔> <钢笔 颜色="红色" 质地="塑料">7</钢笔> <铅笔 颜色="绿色" 质地="木制">20</铅笔> <金额> <毛收入>3000</毛收入> <成本>1000</成本> </金额> </进货数据>
|