XMLをパースしてくれるXML_Unserializerなのですが、本日パースした結果がうまく取得できず、PEAR_ERRORが表示されるという現象に出会いました。
PEARからのエラーメッセージを見てみると、
No unserialized data available. Use XML_Unserializer::unserialize() first.
と表示されているのですが、unserialize()ならすでに使っているので、そういうことではなく、別の原因であるようです。
ではその別の原因とは何か、Googleでそれっぽいキーワードで検索をかけて探っていくと、想定していない文字コードがXMLの中にあるためではないかという仮定を得られました。
そこで、XMLのテキストデータを渡す前にひと工夫。mb_convert_encoding()を使ってUTF-8に強制的に変換することにしました。
こんな感じです。
$Xml = mb_convert_encoding($Xml, "UTF-8", "auto");
$unserializer = & new XML_Unserializer();
$unserializer->setOption('parseAttributes',true);
$unserializer->unserialize($Xml);
$result = $unserializer->getUnserializedData();
結果、うまく通るようになりました。