SimpleXML,CDATA和HTML实体

时间:2010-11-18 11:38:17

标签: php flash simplexml

第一次尝试使用“简单”XML时,我正在撕裂我的头发。我正在为基于Flash的站点构建一个小型CMS,内容保存在XML文件中。我的问题是许多复制字段是XML CDATA字段。一方面,用:

$xml = simplexml_load_file($file, 'SimpleXMLElement', LIBXML_NOCDATA);

我可以从该节点中提取数据,并剥离CDATA标签。我的问题来自尝试使用以下方式保存数据:

file_put_contents($file, $xml->asXML());

问题是:

a)标签用它们的HTML实体等价物解释。我不希望这种情况发生。我收集这是来自asXML方法,因为即使我在$ _POST数据上执行了html_entity_decode,它仍然被转换。

b)由于上述原因,没有办法添加CDATA标签,因为它们也有转换的字符。

到目前为止,SimpleXML对我来说简直太简单了。有没有人碰到这个?

2 个答案:

答案 0 :(得分:1)

实际上,这似乎正是我需要做的事情:

How to keep DOMDocument from saving < as &lt

虽然倾向于使用DOM api的手册给了我一些我想学习的新东西。

答案 1 :(得分:0)

之前我没有使用过simpleXML,但是如果你的问题是你的数据被保存为XML编码,那么Flash可以将XMLEncoded数据本地转换为XML对象。您可以加载数据并将其传递给新的XML对象,如下所示:

var ldr:URLLoader = new URLLoader( new URLRequest('./test.xml') ); ldr.addEventListener( Event.COMPLETE, handleLoaded );

function handleLoaded( e:Event ) : void { var xml:XML = new XML(e.target.data); }

您将拥有一个原生的Flash XML对象。

如果您使用的是AS2,则需要使用LoadVars对象来加载数据,但是您需要使用onData(非onLoad)事件来获取XML编码的字符串并将其传递给XML对象。

不确定这是否可以解决您的问题,但可能会有所帮助。