在AS3的XML变量中转义Curly Braces

时间:2011-06-20 19:19:07

标签: xml flex actionscript-3

我正在尝试创建XML变量,但我需要在其中加入{}

public class MyClass {

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


    ...

}

Flex正在尝试查找名为PROTOCOLSERVERFOLDER的变量。我需要通过转义大括号来防止这种情况。

问题:如何摆脱花括号?

4 个答案:

答案 0 :(得分:4)

我有几点想法:

  • 您可以将整个事物放在String中,然后转换String(请参阅here以获取多行字符串)
  • 您可以将{替换为&#123; (将}替换为&#125;是可选的)
  • 之后添加节点(很糟糕,但技术上可以选择)

答案 1 :(得分:3)

我会将文本分配给字符串,然后将该字符串绑定在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>;
    }

    ...

}

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

答案 2 :(得分:2)

我希望你使用CDATA声明,这应该编译没有问题。这与MXML在Script标签中允许“非标准XML”的方式相同:

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

大括号似乎没有标准的HTML实体代码;但根据@cwallenpoole的答案,您可以使用ASCII code创建它。 {对于开括号,}为近括号:

private var simple:XML = 
    <config>
        <url>&#123;PROTOCOL&#125;://&#123;SERVER&#125;/&#123;FOLDER&#125;</url>
    </config>

答案 3 :(得分:0)

你也可以逃避 {} w / 反斜杠。例如, {} 用于正则表达式,但也表示使用RegExpValidator时的绑定。

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

这会让 {2} 流向表达式,而不是评估为2。