如何从inputTextField替换我的xml中的节点?

时间:2011-12-25 21:59:28

标签: xml actionscript-3

我有一个inputTextField,在我的GamePage类的inputTextField中,我希望能够在inputTextField中获取你应该能够编写的文本,并将inputTextField中的文本替换为我的xml中的节点 - FIL。在上面的我的Xml类中,我想要那个转换来自inputTextField的文本的代码,例如。如果我在inputTextField中写“monkey”,我想用猴子替换xml-fil中的{ANIMAL}节点。

package 
{

    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.xml.XMLDocument;
    import flash.xml.XMLNode;

    public class Xml extends Sprite 
    {

        private var xmlText:TextField;
        private var xml:XML;
        private var textBox:TextField;

        public function Xml() 
        {

            var xmlString:URLRequest = new URLRequest("tales.xml");
            var xmlLoader:URLLoader = new URLLoader(xmlString);

            xmlLoader.addEventListener("complete", init);

            function init(event:Event):void 
            {

                var xml:XML = XML(xmlLoader.data);
                var xmlText:TextField = new TextField();

                addChild(xmlText);

                xmlText.width = 500; xmlText.height = 500; xmlText.x = 5; xmlText.y = 100;
                xmlText.text = xml.tale; XML.ignoreWhitespace = true;

                var format:TextFormat = new TextFormat();
                format.color = 0x990000;
                format.size = 18;

                xmlText.setTextFormat(format); 
            }
        }
    } 
}

这是我的xml-fil(Google Translated from Swedish):

曾经有{ANIMAL}来自{CITY}。 {ANIMAL}生活在一个小小的红色julhus中,就像圣诞老人一样。 {CITY}也有她的圣诞老人,他的名字是{NAME}。 {ANIMAL}和{NAME}实际上是很久以前最好的朋友,他们住在同一个小红房子里。

1 个答案:

答案 0 :(得分:1)

如果您想通过更改InputField来替换文字,则应该听取Event.CHANGE的{​​{1}}。在此侦听器中,您可以重定向到将执行替换的方法。加载XML后,您还应调用此方法,以便删除初始值。

我没有在你的代码示例中看到InputFields,所以这里有一个如何设置它的快速示例。

InputFields

private var animalInputField:TextField; private var cityInputField:TextField; private var nameInputField:TextField; private var xmlText:TextField; public function Xml() { var xmlString:URLRequest = new URLRequest("tales.xml"); var xmlLoader:URLLoader = new URLLoader(xmlString); xmlLoader.addEventListener(Event.COMPLETE, init); function init(event:Event):void { xml = XML(xmlLoader.data); xmlText = new TextField(); addChild(xmlText); xmlText.width = 500; xmlText.height = 500; xmlText.x = 5; xmlText.y = 100; xmlText.text = xml.tale; XML.ignoreWhitespace = true; var format:TextFormat = new TextFormat(); format.color = 0x990000; format.size = 18; xmlText.setTextFormat(format); // create inputfields animalInputField = createInputField(); cityInputField = createInputField(); nameInputField = createInputField(); cityInputField.x = 100; nameInputField.x = 200; updateTale(); } } private function createInputField() : TextField { var inputField:TextField = TextField(addChild(new TextField())); inputField.type = TextFieldType.INPUT; inputField.text = '...'; inputField.addEventListener(Event.CHANGE, onInputChanged); return inputField; } private function onInputChanged(e:Event):void { updateTale(); } private function updateTale() : void { var tale:String = xml.tale; tale = tale.replace(/{ANIMAL}/g, animalInputField.text); tale = tale.replace(/{CITY}/g, cityInputField.text); tale = tale.replace(/{NAME}/g, nameInputField.text); xmlText.text = tale; } 方法中,我正在使用正则表达式,我使用'g'(全局)标志来对任何实例进行Flash搜索,而不仅仅是第一次出现。

请注意,在您的示例中,您有一个私有变量updateTale()xmlText但从不使用它们,因为在xml侦听器中您创建了两个名为{{1}的本地变量}和init(event:Event)以及。