XMLをsimplexml_load_file(string)してSimpleXML Element Objectを生成し、ファイル等に保存しようとしたところでエラー発生。orz
こんなコードを書いて、
<?php
$xml_file = "/tmp/test.xml";
$object = simplexml_load_file($xml_file,'SimpleXMLElement', LIBXML_NOCDATA);
// シリアライズ
$serialized_data = serialize($object);
// アンシリアライズしてdumpするだけ
var_dump(unserialize($serialized_data));
?>
実行すると、
[myuser@myserver ~]$ php simplexml_serialize_test.php
Warning: unserialize(): Node no longer exists in /home/myuser/simplexml_serialize_test.php on line 9
Warning: unserialize(): Node no longer exists in /home/myuser/simplexml_serialize_test.php on line 9
Warning: unserialize(): Node no longer exists in /home/myuser/simplexml_serialize_test.php on line 9
Warning: unserialize(): Node no longer exists in /home/myuser/simplexml_serialize_test.php on line 9
(略)
[myuser@myserver ~]$
しばらく自分のコードがおかしいのかと思って時間かけちゃったよ。orz
で、調べてみると
■SimpleXMLElementをserializeするとunserialize時にエラー
http://www.kgworks.net/blog/entry/20080712124141
とか。マニュアルのメモに対処方法が書いてあるとか言ってるので調べてみると
「simplexml_load_***で生成したオブジェクト名(SimpleXMLObject)をスタンダードクラス(StdClass)に変更しないとunserialize時にエラーが起きる」
..........うーん。
しかも、
「シリアライズするフィールドにCDATAタグで囲まれたHTMLを含んでいるとエラーになる」
..........うーーーーーーーーーーーーーーーーーーん。orz
ということでserializeをやめてjson_encode/decodeにしたとさ。(弱っ)
こんなコードを書いて、
<?php
$xml_file = "/tmp/test.xml";
$object = simplexml_load_file($xml_file,'SimpleXMLElement', LIBXML_NOCDATA);
// シリアライズ
$serialized_data = serialize($object);
// アンシリアライズしてdumpするだけ
var_dump(unserialize($serialized_data));
?>
実行すると、
[myuser@myserver ~]$ php simplexml_serialize_test.php
Warning: unserialize(): Node no longer exists in /home/myuser/simplexml_serialize_test.php on line 9
Warning: unserialize(): Node no longer exists in /home/myuser/simplexml_serialize_test.php on line 9
Warning: unserialize(): Node no longer exists in /home/myuser/simplexml_serialize_test.php on line 9
Warning: unserialize(): Node no longer exists in /home/myuser/simplexml_serialize_test.php on line 9
(略)
[myuser@myserver ~]$
しばらく自分のコードがおかしいのかと思って時間かけちゃったよ。orz
で、調べてみると
■SimpleXMLElementをserializeするとunserialize時にエラー
http://www.kgworks.net/blog/entry/20080712124141
とか。マニュアルのメモに対処方法が書いてあるとか言ってるので調べてみると
「simplexml_load_***で生成したオブジェクト名(SimpleXMLObject)をスタンダードクラス(StdClass)に変更しないとunserialize時にエラーが起きる」
..........うーん。
しかも、
「シリアライズするフィールドにCDATAタグで囲まれたHTMLを含んでいるとエラーになる」
..........うーーーーーーーーーーーーーーーーーーん。orz
ということでserializeをやめてjson_encode/decodeにしたとさ。(弱っ)