【问题标题】:problem with actionscript 3 and xmlactionscript 3和xml的问题
【发布时间】:2010-06-22 14:19:09
【问题描述】:

我不小心在一个无法选择 php 的项目中使用了 flash,不幸的是,我已经到了需要编辑一些动作脚本的地步,这超出了我的能力。

xml 看起来像这样(我知道这很愚蠢,但它已经绑定到一些 php 解析函数中,重写会很烦人!)

<project>
<project_1>
<name>Place name</name>
<other>sample</other>
</project_1>

<project_2>
<name>Place name</name>
<other>paragraph of text</other>
</project_2>

</project> 

我正在尝试从 Flash xml 编辑器 2 编辑界面,下面是相关代码。我需要在节点名称之后包含名称文本,因此它会在编辑器的相关选项卡上显示 project_2 Place name。我尝试的编辑已被评论。任何帮助将不胜感激!

汤姆

public class ClassicXMLNode extends MovieClip implements IEventDispatcher{
    public var XMLData:XML;
    public var isRoot:Boolean = false;
    public var num:Number;
    public var nodeName:String;
    public var nodePath:String;             // This will track the path throughout the XML document
    public var childrenNodes:XMLList;
    public var numNodes:uint;
    public var childHolder:MovieClip;
    public var isOpen:Boolean = false;      // Tracks whether the nodes data is opened or closed

    public static var moveDistance:Number; // This will be used for recursive loops : opening and closing sections

    public function ClassicXMLNode(Data:XML, nodeNum:Number, xmlPath:String = null) {           
        XMLData = Data;
        num = nodeNum;

        xmlPath ? nodePath = xmlPath : nodePath = "";
        nodeName = XMLData.name();
        nodePath += "." + nodeName;
        //trace(nodePath);

        addEventListener(Event.ADDED_TO_STAGE, addedListener);
    }

    public function addedListener(e:Event):void {
          //I added the var project

        var project:String = XMLData.project*.name.text();
        //Load the XMLData
            //and tried to concatenate it here

        nodeName_txt.text = XMLData.name + project();
        childrenNodes = XMLData.children();
        numNodes = childrenNodes.length();

        //Create the holder for childNodes
        childHolder = new MovieClip();
        childHolder.y = ClassicTree.nodeSpacing;
        childHolder.x = 50;
        addChild(childHolder);

        // Event Listeners
        openButton.buttonMode = true;
        openButton.tabEnabled = false;
        openButton.addEventListener(MouseEvent.CLICK, _click);
        numNodes == 0 ? openButton.visible = false : null;
        this.addEventListener(MouseEvent.MOUSE_OVER, hideActionMenu);
        this.addEventListener(MouseEvent.MOUSE_OUT, hideActionMenu);
        hideActionMenu();
        moveButtonCheck();
    }

【问题讨论】:

    标签: xml flash actionscript-3


    【解决方案1】:

    我不确定这是否会有所帮助,但对我来说;我通常喜欢将我的 XML 转换为 DataProvider(因为我几乎总是在某些将 DataProviders 当作内容使用的组件中使用它)。

    import fl.data.DataProvider;
    function xmlParse(data:XML):DataProvider { 
        var dp:DataProvider;
        var i:uint;
        var obj:Object;
        var node:XML;
    
        dp = new DataProvider(); 
    
        for (i = 0; i < data.children().length(); i++) { 
            node = data.children()[i];
    
            obj = {
                branch: node.name(),
                name: node.name.text(),
                other: node.other.text()
            }
    
            dp.addItem(obj);
        }
    
        return dp;
    }
    
    var mydp:DataProvider = xmlParse(xml);
    var item:Object = mydp.getItemAt(0);
    
    for (var prop:String in item) { trace(prop, '->', item[prop]); }
    

    【讨论】:

    • 酷,谢谢,看起来是一种更好的做事方式。不幸的是,我正在编辑一个更大的应用程序的一部分,所以它并没有完全配合。不过,我现在已经想通了,见下文... :)
    【解决方案2】:

    我刚刚想通了,我删除了添加的变量并编辑了这一行

    nodeName_txt.text = XMLData.name() + XMLData.name.text()
    

    它获取节点名称,如果它有一个子“名称”,它将添加该子文本。感谢所有观看和 camdagr8 的人!

    【讨论】:

      猜你喜欢
      • 2011-08-12
      • 2011-06-07
      • 1970-01-01
      • 2018-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多