AS3'中的逃逸花括号;s XML变量

AS3'中的逃逸花括号;s XML变量,xml,apache-flex,actionscript-3,Xml,Apache Flex,Actionscript 3,我试图创建一个XML变量,但我需要在其中包含{和} public class MyClass { private var simple:XML = <config> <url>{PROTOCOL}://{SERVER}/{FOLDER}/</url> </config> ... } 公共类MyClass{ 私有变量simple:XML= {PROTOCOL}://{

我试图创建一个XML变量,但我需要在其中包含
{
}

public class MyClass {

    private var simple:XML = 
        <config>
            <url>{PROTOCOL}://{SERVER}/{FOLDER}/</url>
        </config>


    ...

}
公共类MyClass{
私有变量simple:XML=
{PROTOCOL}://{SERVER}/{FOLDER}/
...
}
Flex正在尝试查找名为
协议
服务器
文件夹
的变量。我需要通过避开花括号来防止这种情况


问题:我如何避开大括号?

我认为如果使用CDATA声明,这应该会编译w/o问题。这与MXML在脚本标记中允许“非标准XML”的方式相同:

private var simple:XML = 
    <config>
        <url><![CDATA[{PROTOCOL}://{SERVER}/{FOLDER}/]]></url>
    </config>
private-var-simple:XML=
对于花括号,似乎没有标准的HTML实体代码;但是基于@cwallenpole-answer,您可以使用。{对于开放式括号和}对于封闭式括号:

private var simple:XML = 
    <config>
        <url>&#123;PROTOCOL&#125;://&#123;SERVER&#125;/&#123;FOLDER&#125;</url>
    </config>
private-var-simple:XML=
{;协议和#125;://{;服务器和#125;/{;文件夹和#125;

我有几个想法:

  • 您可以将整个内容放置在一个字符串中,然后强制转换该字符串(有关获取多行字符串的信息,请参见)
  • 您可以使用将
    {
    替换为
    {;
    (将
    }
    替换为
    };
    是可选的)
  • 之后添加节点(很糟糕,但从技术上讲,这是一个选项)

我会将文本分配给一个字符串,然后将该字符串绑定到XML中-避免转义所有内容

public class MyClass {

    private var simple:XML = null;

    public function MyClass()
    {
        super();

        var s:String = "{PROTOCOL}://{SERVER}/{FOLDER}/";
        simple = <config>
            <url>{s}</url>
        </config>;
    }

    ...

}
公共类MyClass{
私有变量simple:XML=null;
公共函数MyClass()
{
超级();
var s:String=“{PROTOCOL}://{SERVER}/{FOLDER}/”;
简单=
{s}
;
}
...
}

如果您必须有大量需要转义的文本,那么您可能需要按照cwallenpoole的建议从字符串创建XML实例,或者创建一个函数来绑定特定元素的字符串,然后将其附加到相应的父元素。

您还可以转义{}w/反斜杠。例如,{}在正则表达式中使用,但在使用RegExpValidator时也表示绑定

<mx:RegExpValidator id="regExpValidator"
                    expression="[A-Za-z0-9]\{2\}[0-9]\{1,4\}"
                    flags="gi"
                    required="true" />


这让{2}流到表达式,而不是计算到2。

+1用于了解花括号的HTML实体。你只是“知道吗”?还是你必须查找它?如果查找它?如何/在哪里?(所有这些都假设Flextras的建议不起作用。这些更明显,我的是。)“好吧,显而易见的失败了,让我们来破解它”)@Flextras我想说我知道,我只是比你更快地找到我的Ascii表。谢谢你的解决方案。效果很好。明天我会接受你的答案。我只想让它通宵开放,希望有人能提出更漂亮的建议。更改所有
{
在我的代码中转换为ASCII使我的代码可读性大大降低。@sixtyfootersdude Yea…有时AS没有任何意义。我认为您的第一个解决方案不好,因为CDATA保留在XML中并更改其结构。这是不好的,因为通常在XML中
{
char是允许的。它仅在as3 xml中是不允许的。您的第二个解决方案完全不起作用。第三个解决方案起作用。@sixtyfootersdude我从我的答案中删除了不正确的建议。这就是它被否决的原因吗?据我所知,这两个解决方案不是都改变了xml吗?您为什么要声明第一个解决方案不好;但是第二个好吗?