2010-01-22 46 views
0

我在一个ActionScript项目中使用URLLoader来读取一些XML。然后我处理它,并将其放入文本字​​段中。一切都很美好。但是,我并不想让XML在我的SWF外部。所以我这样做:Actionscript剥离空白时它不应该

var internalXML:XML = <Content><P>It was in <City>Paris</City> that I first 
took a <Activity>walk in nature</Activity>.</P></Content> 

也就是说,我把相同的XML,直接在我的ActionScript其分配到一个XML对象实例。然后我运行完全相同的过程。但是这次,任何XML标签内容和纯文本之间的空格都被剥离了。

这样上面的内容就会在文本框中显示出来:“这是因为我第一次在自然界中遇到了麻烦。”

在这两种情况下,我都得到了XML.ignoreWhitespace = false。我也尝试过XML.prettyPrinting = false。没有帮助。

任何人都知道会发生什么?

回答

1

可能是空白修剪发生在编译时,而不是运行时(因此XML.IgnoreWhitespace无效)。

要有逐字保留到运行时的XML(就像是当你之前加载它),只是把它变成一个字符串:

var internalXML:XML = XML("<Content><P>It was in <City>Paris</City> that I first took a <Activity>walk in nature</Activity>.</P></Content>")

+0

指教,谢谢卡梅伦。在此期间,我发现了一个更简单的解决方案,我想可以完成同样的事情。我的主类中的处理程序中有XML.ignoreWhitespace = false。我将它移到了课程之外,并将其放在导入语句后面。现在它可以工作。 如果ignoreWhitespace是一个静态属性,为什么它声明在哪里?更一般地说,你怎么知道在编译时做了什么以及在运行时完成了什么? – David 2010-01-24 16:37:29

+0

因为ignoreWhitespace是一个静态属性,所以它不应该在什么地方设置(尽管有时在Flash中有一些奇怪的错误)。也许你认为它的代码没有被执行?另外,我只是在猜测编译时的事情。我实际上不知道内联XML会发生什么(我不完全确定它是否被记录)。作为一般的经验法则,编译时可以确定的事情通常是在那时完成的,因为这样做只需要一次,而不必在运行时完成。你必须阅读文档或尝试找出肯定的东西。 – Cameron 2010-01-29 17:01:35