xml - Actionscript/flex3 : Escape XML special characters like <, >, "and ' 标签内容内/内

标签 xml regex apache-flex actionscript string-parsing

是否有一种方法可以通过仅将 XML 处理为字符串来转义 XML 标记内容中的 XML 特殊字符?可以使用正则表达式(regexp)来完成吗? 当尝试从字符串创建 new XML() 时,我收到格式错误的 XML 的运行时错误,因为它在某些标记内包含“<”字符。

最佳答案

你可以使用这样的东西:

 public static function escapeXMLTagContents(a_string:String):String{
        var l_indexOfSpecialChar:int = -1,
            l_tagsMatch:RegExp =/<(\?|[a-zA-Z_]{1}|\/{1})[^<]*?>/g,
            l_tags:Array = [],
            l_tagCharacterIndexes:Array = [],
            l_stringCopy:String = new String(a_string),
            i:int = -1,
            l_replaceArray:Array = [],
            l_return:String = "",
            l_tagCharIndex:int = -1,
            l_replaceChar:String = "";

        l_replaceArray.push("&|&amp;");
        l_replaceArray.push("<|&lt;");
        l_replaceArray.push(">|&gt;");
        l_replaceArray.push("\"|&quot;");
        l_replaceArray.push("'|&apos;");

        l_tags = a_string.match(l_tagsMatch);
        i = l_tags.length;
        while (--i > -1){
            var l_tagText:String = l_tags[i];
            var l_startIndex:int = l_stringCopy.lastIndexOf(l_tagText);
            var l_endIndex:int = l_startIndex + (l_tagText.length - 1);

            for (var j:int = l_startIndex; j <= l_endIndex; j++){
                if(l_tagCharacterIndexes.indexOf(j) < 0){
                    l_tagCharacterIndexes.push(j);
                }
            }

            l_stringCopy = l_stringCopy.substring(0, l_startIndex);
        }

        l_return = new String(a_string);
        for each (l_replaceChar in l_replaceArray){
            l_stringCopy = new String(l_return);
            while ((l_indexOfSpecialChar = l_stringCopy.lastIndexOf(l_replaceChar.charAt(0))) > -1) {
                // determine if it char needs to be escaped (i.e is inside tag contents)
                if(l_tagCharacterIndexes.indexOf(l_indexOfSpecialChar) == -1){
                    l_return = l_return.substring(0, l_indexOfSpecialChar) + l_replaceChar.split("|")[1] + l_return.substring(l_indexOfSpecialChar+1);

                    // adjust indexes
                    for (i = 0; i < l_tagCharacterIndexes.length; i++) {
                        l_tagCharIndex = l_tagCharacterIndexes[i];
                        if(l_tagCharIndex >= l_indexOfSpecialChar) {
                            l_tagCharacterIndexes[i] = l_tagCharacterIndexes[i] + String(l_replaceChar.split("|")[1]).length-1; // -1 from the old characther "&,<,>," or '"
                        }
                    }
                }

                l_stringCopy = l_stringCopy.substring(0, l_indexOfSpecialChar);
            }
        }

        return l_return;
    }

关于xml - Actionscript/flex3 : Escape XML special characters like <, >, "and ' 标签内容内/内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18469368/

相关文章:

javascript - Google Script 解析文本

apache-flex - Adobe 试验中的机场自动收报机效果

apache-flex - 是否确实需要旧版本的flex SDK?

css - 中心闪光元素基于元素实际大小 2

java - Jaxb可以自动映射对象吗?

regex - HTML5 模式发挥作用

java - 使用 jax-rs 从 REST 服务下载 xml 而无需本地存储文件

java - Matcher java 不起作用,但正则表达式似乎不错

c# - 序列化 : Change the name of the root node without changing the class name

java - 如何从 XML 中反序列化 Java 对象?