在actionsctipt 3中使用insertChildAfter for xml时出现问题

时间:2011-05-09 20:56:59

标签: xml flash actionscript-3 e4x

在我的XML中非常嵌套的现有节点之后插入子节点时遇到了很多麻烦。我正在尝试在object3_LIST3下插入另一个IObject节点。

我已经尝试了与Having trouble with insertChildBefore and insertChildAfter in AS3相同的方案。这总是输出undefined,我似乎无法弄清楚为什么..任何人都可以帮忙吗?

如果我跟踪contentNode和parentNode,则输出:

object3_LIST3

<objects>
  <IObject>object3_LIST3</IObject>
</objects>

好像对文件没有任何改变......

var contentNode:XML = xml.Menu.menuArr.HeadMenuItem[1].subMenu.subMenuItem[1].objects[0];
var parentNode:XML = xml.Menu.menuArr.HeadMenuItem[1].subMenu.subMenuItem[1].objects.IObject[0];
xml = parentNode.insertChildAfter( contentNode, xmlString );
trace(xml);

<PandemicMenu>
    <Menu>
        <menuArr>
            <HeadMenuItem>
                <subMenu>
                    <IObject>
                        object1_LIST1
                    </IObject>
                    <IObject>
                        object2_LIST1
                    </IObject>
                    <IObject>
                        object3_LIST1
                    </IObject>
                </subMenu>
            </HeadMenuItem>

            <HeadMenuItem>
                <subMenu>
                    <IObject>
                        object1_LIST2
                    </IObject>
                    <subMenuItem>
                        <objects>
                            <IObject>
                                object2_LIST2
                            </IObject>
                        </objects>
                    </subMenuItem>
                    <subMenuItem>
                        <objects>
                            <IObject>
                                object3_LIST3
                            </IObject>
Want to insert new IObject here
                        </objects>
                    </subMenuItem>
                </subMenu>
            </HeadMenuItem>
        </menuArr>
    </Menu>
</PandemicMenu>

1 个答案:

答案 0 :(得分:0)

您的父节点和子节点已切换。您的子节点是:

var contentNode:XML = xml.Menu.menuArr.HeadMenuItem[1].subMenu.subMenuItem[1].objects[0];

使用contentNode.toXMLString()跟踪以下内容:

<objects>
  <IObject>object3_LIST3</IObject>
</objects>

由于文档声明:“如果提供了child1,但它在XML对象中不存在,则不会修改XML对象并返回未定义的内容。” http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/XML.html#insertChildAfter%28%29

问题可能是您要求子节点查找其无法找到的父节点,因此原始节点未经修改。请尝试以下方法:

var parentNode:XML = xml.Menu.menuArr.HeadMenuItem[1].subMenu.subMenuItem[1].objects[0];
var contentNode:XML = xml.Menu.menuArr.HeadMenuItem[1].subMenu.subMenuItem[1].objects.IObject[0];
xml = parentNode.insertChildAfter( contentNode, xmlString );
trace(xml);

我所做的就是切换parentNode和contentNode XML对象的内容。