проблема с Actionscript 3 и XML - PullRequest
1 голос
/ 22 июня 2010

Я случайно натолкнулся на использование flash для проекта, в котором php был недоступен, к сожалению, я пришел к моменту, когда мне нужно отредактировать небольшой скрипт, и он мне не подходит.

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 Поместите имя на соответствующую вкладку в редакторе. Редактирование, которое я пытался прокомментировать. Любая помощь будет принята с благодарностью!

Tom

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();
    }

Ответы [ 2 ]

0 голосов
/ 23 июня 2010

Я только что понял это сейчас, я удалил свои добавленные переменные и отредактировал эту строку

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

, которая получает имя узла и, если у него есть дочернее имя, добавит этот дочерний текст,Спасибо всем, кто посмотрел и camdagr8!

0 голосов
/ 22 июня 2010

Я не уверен, поможет ли это, но для меня;Мне обычно нравится конвертировать мой XML в DataProvider (потому что я почти всегда использую его в каком-то компоненте, который использует DataProvider в качестве контента).

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]); }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...