How-to Serialize / Unserialize объекта SimpleXML?

Я видел несколько креативных решений для работы с сериализованными объектами SPL, но я ищу еще варианты (или разработки). Я храню вложенные сериализованные объекты – из которых один – SimpleXML – в базе данных, только для последующей сериализации. Это, очевидно, вызывает некоторые проблемы.

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

Кто-нибудь имеет представление о высоконадежных методах работы с сериализованными объектами SPL? __sleep () / __ wakeup () переопределяет? Монолитные к StdClass? Вставить в строку, а затем сериализовать?

Любая помощь приветствуется.

[ Изменить : область и вариации этих XML-схем слишком разнообразны для сопоставления с ORM. Они на самом фундаментальном уровне представляют собой произвольные полезные нагрузки в процессах, связанных с состоянием, вызванных в рамках поддерживаемых API.]

Несмотря на вопросы о целесообразности, вы можете включить его в XML следующим образом:

 $xml = $simpleXmlElem->asXML(); 

И затем, когда вы вытащите его из базы данных:

 $simpleXmlElem = simplexml_load_string($xml); 

Что касается того, целесообразно ли просто сериализовывать большие куски XML, может быть, что размещение XML в базе данных удаляет большую часть преимуществ использования реляционной системы, но у вас есть преимущество в том, что вы можете разместить произвольную рабочую нагрузку. Если некоторые поля универсальны и / или вы получаете выгоду от нормализации их должным образом (например, вы хотите выбрать на основе этих полей), переместите их в нормализованные столбцы.

Более ясный и ООП.

 namespace MyApp; class SimpleXMLElement extends \SimpleXMLElement { public function arrayToXml($array = array()) { array_walk_recursive($array, array(&$this, 'addChildInverted')); return $this; } public function addChildInverted($name ,$value) { parent::addChild($value,$name); } } 

и вызов

  $xml = new \MyApp\SimpleXMLElement('<resultado/>'); echo $xml->arrayToXml($app->getReturnedValue())->asXML(); 

Разве простое рендеринг и хранение XML не будет лучшим способом сериализации любого объекта, представляющего структуру XML?

Что вы пытаетесь сделать с сериализованными данными, которые могут помешать этому?

редактировать:

Также,

Я храню вложенные сериализованные объекты […] в базе данных, только для последующего сериализации

Почему вы храните сериализованные данные PHP в базе данных? Существует множество способов хранения объектов в базе данных.