如何从InputExtField替换xml中的节点?

如何从InputExtField替换xml中的节点?,xml,actionscript-3,Xml,Actionscript 3,我有一个InputExtField,在我的GamePage类的InputExtField中,我希望能够获取您应该能够在InputExtField中写入的文本,并将InputExtField中的文本替换为我xml文件中的节点。在上面的Xml类中,我希望有转换inputTextField中文本的代码,例如,如果我在inputTextField中写“monkey”,我希望用monkey替换Xml文件中的{ANIMAL}节点 package { import flash.display.Mo

我有一个InputExtField,在我的GamePage类的InputExtField中,我希望能够获取您应该能够在InputExtField中写入的文本,并将InputExtField中的文本替换为我xml文件中的节点。在上面的Xml类中,我希望有转换inputTextField中文本的代码,例如,如果我在inputTextField中写“monkey”,我希望用monkey替换Xml文件中的{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文件():


从前有一只{动物}从{城市}来。{动物}和圣诞老人一样,住在一个红色的小朱尔胡斯。{CITY}还有她的圣诞老人,还有他的名字{name}。{ANIMAL}和{NAME}实际上是很久以前最好的朋友了,他们住在同一间小红楼里

如果要通过更改
输入字段
来替换文本,应收听
输入字段
事件。在这个监听器中,您可以重定向到一个将进行替换的方法。加载XML后,还应调用此方法,以便去掉初始值

我在您的代码示例中没有看到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;
}
updateTale()
方法中,我使用了一个正则表达式,其中我使用“g”(全局)标志对任何实例进行快速搜索,而不是只对第一个实例进行快速搜索


请注意,在您的示例中,您有一个私有变量
xmlText
xml
,但从不使用它们,因为在
init(event:event)
侦听器中,您创建了两个本地变量,分别称为
xmlText
xml

尝试用英语发布您的问题,并尽可能具体。并尝试格式化您的代码,并在将来制作。除此之外,您的XML的内容是什么?我的问题是英语,我只想替换我的XML{nodes}。。。是的,我将在将来格式化我的代码。啊,我的错,如果你在正文中输入更多的信息,可能会更清楚(现在只有标题解释了这个问题)。我没有注意到文本是你的XML故事。好了,现在我不再关注了。我以为您想用一些XML节点替换文本。尽量更新你的问题并尽可能具体,请准确地写下你想要达到的目标。{CITY}、{NAME}和{ANIMAL}替换应该从哪里来?好的,我有一个inputExtField,在我的GamePage类的inputExtField中,我希望能够获取您应该能够在inputExtField中写入的文本,并用我的xml文件中的节点替换inputExtField中的文本。在我上面的Xml类中,我希望有转换InputExtField文本的代码,例如,如果我在InputExtField中写“monkey”,我想用monkey替换Xml文件中的{ANIMAL}节点。谢谢,rvmook!!!我应该用英语写我的故事,对不起,我的错。我要试试你的代码示例…你的代码不起作用。发生了什么事?在我的xml文件的第一行,{DJUR}和{STAD}消失了,这是唯一发生的事情…你能把xml的内容放在哪里吗?嗯,我真的不明白你的问题。你是说我是否可以显示我的xml内容?是的,我可以。您正在加载xml,它是如何构造的?所以我可以相应地调整代码