2

假设我有一个包含以下内容的 XML 文件:

<description><![CDATA[

   <h2>lorem ipsum</h2>
   <p>some text</p>

]]></description>

我想在 ActionScript 2 中获取并解析为 HTML 文本,并在显示之前设置一些 CSS。问题是,Flash 采用这些空格(换行符和制表符)并按原样显示。

<some whitespace here>
       lorem ipsum
       some text

我想要的输出在哪里

lorem ipsum
some text

我知道我可以直接从 XML 文件中删除空格(我工作场所的 Flash 开发人员也建议这样做。我猜他不知道如何做到这一点[叹气])。但是这样做,很难阅读 XML 文件中的部分,尤其是当涉及到大量标签时,这会使编辑更加困难。

所以现在,我正在寻找一种在 ActionScript 中去除这些空格的方法。我试过使用 PHP 的str_replace等价物(从这里得到)。但是我应该用什么作为针(要搜索的字符串)?(我试图输入"\t"and "\r",似乎无法检测到那些空格)。

编辑 :

现在我已经尝试newline像针一样投入,它可以工作(意味着换行成功被剥离)。

mystring = str_replace(newline, '', mystring);

但是,换行符只被剥离一次,这意味着在每个连续的换行符中(例如,一个换行符后跟另一个换行符)只能剥离一个换行符。

现在,我不认为这是str_replace函数中的问题,因为除了换行符之外的每个连续字符都被剥离得很好。

对 ActionScript 中如何处理此类事情感到非常困惑。:-s

编辑2:

我已经尝试了 str_replace -ing 我所知道的所有内容,\n、\r、\t、换行符和制表符(通过按制表键)。替换 \n、\r 和 \t 似乎没有任何效果。

我知道通过成功地做到这一点,我的内容永远不会有真正的换行符。这正是我的意图。我可以按照我想要的方式格式化 XML,而无需 Flash 显示任何格式化内容。:)

4

4 回答 4

2

有几种方法可以解决这个问题。也许最简单的答案是,从某种意义上说,您的 Flash 开发人员可能是对的,您应该将空格移到 CDATA 容器之外。原因是,许多人(至少我)倾向于假设 CDATA 中的所有内容都是“真实数据”,而不是标记。另一方面,通常假定 CDATA之外的空白是不相关的,因此数据如下:

<description>

<![CDATA[<h2>lorem ipsum</h2>
<p>some text</p>]]>

</description>

会更容易理解和使用。(闪存开发人员可以使用该XML.ignoreWhite属性忽略 CDATA 之外的空白。)

话虽如此,如果您手动编辑 XML,那么我可以理解为什么使用您描述的格式会更容易。但是,如果额外的空格在 CDATA 内部,那么它将不可避免地包含在您提取的字符串数据中,因此您唯一的选择是获取 CDATA 的内容并在之后删除空格。

然后你的问题减少到“如何从 AS2 中的字符串中去除前导/尾随空格?”。不幸的是,由于 AS2 不支持 RegEx,因此没有简单的方法可以做到这一点。我认为您最好的选择是从头到尾解析以找到第一个/最后一个非白色字符。这些方面的东西(未经测试的伪代码):

myString = stuffFromXML;
whitespace = " " + "\t" + "\n" + "\r" + newline;
start = 0;
end = myString.length;
while ( testString( myString.substr(start,1), whitespace ) ) { start++; }
while ( testString( myString.substr(end-1,1), whitespace ) ) { end--; }
trimmedString = myString.substring( start, end );

function testString( needle, haystack ) {
    return ( haystack.indexOf( needle ) > -1 );
}

希望有帮助!

编辑:我注意到在您的示例中,您还需要删除文本数据中的制表符和空格。这会很棘手,除非您可以保证您的数据永远不会包含“真实”选项卡以及用于格式化的选项卡。无论您如何处理 CDATA 标记,最好不要在真实内容中插入无关格式,然后再以编程方式将其删除。那只会让你自己的生活变得困难。

第二次编辑:至于要删除什么字符以摆脱换行符,这部分取决于 XML 中实际以哪些字符开头(这可能取决于生成文件的操作系统正在运行),部分取决于什么字符客户端机器(显示闪存)考虑换行符。这里有很多血腥的细节。但在实践中,如果您删除\r\n\r\n,则通常可以解决问题。这就是我在示例代码中将 \r 和 \n 添加到“空白”字符串的原因。

于 2008-12-26T02:02:35.517 回答
1

自从我修补 AS2 以来已经有一段时间了。

someXML = new XML();
someXML.ignoreWhite = true;

如果你想str_replace试试'\n'

于 2008-12-24T22:54:29.890 回答
0

您使用 cdata 是否有原因?诚然,我不知道这种情况的最佳实践是什么,但我倾向于将它们排除在外,只将 HTML 放在节点内。 var foo = node.childnodes.join("")解析出来就好了,我似乎从来没有遇到过这些空白问题。

于 2009-01-05T06:11:38.693 回答
0

我一遍又一遍地阅读这篇文章,如果我的解释是正确的,那么您只想知道如何从 AS2 中的字符串中删除某些字符(制表符和换行符),对吧?我不敢相信还没有人给你一个简单的单行答案:

myString = myString.split("\n").join("");

而已。对 \r、\n 和 \t 重复此操作,所有换行符和制表符都将消失。如果您希望它是一个简单的功能,请执行以下操作:

function stripWhiteSpace(str: String) : String
{
    return str.split("\r").join("").split("\n").join("").split("\t").join("");
}

该函数不会修改您的旧字符串,它会返回一个没有 \r、\n 或 \t 的新字符串。要实际修改旧字符串,请使用该函数,如下所示:

myString = stripWhiteSpace(myString);
于 2009-04-10T23:29:14.177 回答