如何序列化/反序列化SimpleXML对象?

all*_*ery 13 php serialization object

我已经看到了一些处理序列化SPL对象的创造性解决方案,但我正在寻找更多选项(或详细说明).我将嵌套的序列化对象(其中一个是SimpleXML)存储在数据库中,以后才能进行非序列化.这显然会引起一些问题.

$s = new SimpleXmlElement('<foo>bar</foo>');
$ss = serialize($s);
$su = unserialize($ss);
// Warning: unserialize() [function.unserialize]: Node no longer exists...
Run Code Online (Sandbox Code Playgroud)

有没有人对处理序列化SPL对象的高可靠性方法有任何见解?__sleep()/ __ wakeup()覆盖?铸造到stdClass的?转换为字符串,然后序列化?

任何帮助表示赞赏.

[ 编辑:这些XML模式的范围和变化太多,无法使用ORM进行映射.它们在最基本的层面上是有状态进程中的任意有效负载,在宁静的API中触发.

Jos*_*tey 32

尽管有关于适当性的问题,您可以将其转换回XML,如下所示:

$xml = $simpleXmlElem->asXML();
Run Code Online (Sandbox Code Playgroud)

然后,当您从数据库中提取它时:

$simpleXmlElem = simplexml_load_string($xml);
Run Code Online (Sandbox Code Playgroud)

至于是否适合序列化大块的XML,将XML放入数据库可以消除使用关系系统的大部分优势,但您确实具有能够容纳任意工作负载的优势.如果某些字段是通用的,和/或您从正确标准化它们中获益(例如,您希望根据这些字段进行选择),请将它们移动到标准化列中.

  • 在我看来,更大的问题是为什么PHP不会自动执行此操作?在PHP中序列化/反序列化xml对象是否有严重的损失? (4认同)