PHP DomDocumentがインストールできない為Simple XML に書き直す場合
2011年12月14日 19時01分
XMLを出力するためにDomDocumentを使用して作成していたのだが開発環境にはライブラリが入っていたが本番環境には’–disable-dom’オプションが付いていてDomDocumentが使えない。
ライブラリをインストールする場合はapache再起動が必要になるため商用リリースしている場合は勿論許可が出にくい。
そんな状況に自分が陥ったのでSimple XMLに書き直した時のメモ。
XML定義
DomDocument
1 2 3 4 |
$dom = new DomDocument("1.0"); $dom->encoding = "UTF-8"; $dom->formatOutput = true; $idea_mail_mag_data = $dom->appendChild($dom->createElement("aaaa")); |
↓
Simple XML
1 2 |
$xml_root = '<?xml version="1.0" encoding="UTF-8"?><aaaa></aaaa>'; $xml = simplexml_load_string($xml_root); |
子供追加・属性設定
DomDocument
1 2 3 4 5 6 7 8 |
//aaaaにbbbbノード追加 $bbbb_node = $idea_mail_mag_data->appendChild($dom->createElement("bbbb")); //bbbbノードに属性flagを追加 $bbbb_node->setAttribute("flag", "1"); //テキストノード追加 $bbbb_node->appendChild($dom->createTextNode("ほげ")); //CDATAで括る場合 $bbbb_node->appendChild($dom->createCDATASection("ほげ")); |
↓
Simple XML
1 2 3 4 5 6 7 8 |
//aaaaにbbbbノード追加 $bbbb_node = $xml->addChild('bbbb'); //bbbbノードに属性flagを追加 $bbbb_node->addAttribute('flag', '1'); //テキストノード追加 $xml->addChild('bbbb', 'ほげ'); //CDATAで括る場合(対応関数がないので直書きする $xml->addChild('bbbb', '<![CDATA[ほげ]]>'); |
後はXML形式に出力。
DomDocumentの場合はただ関数を1つ呼び出すだけでよい。
DomDocument
1 |
echo $dom->saveXML(); |
Simple XMLの場合はどうやってもCDATASectionの対応がライブラリ側だけではエスケープされてしまい誤動作するので以下に記述されていた関数をかます等して外部で対応するしかない。
http://students.kiv.zcu.cz/doc/php5/manual/cs/ref.simplexml.php.html
Simple XML
1 2 3 4 5 6 7 8 9 10 11 12 |
function fixCDATA($string) { $find[] = '<![CDATA['; $replace[] = '<![CDATA['; $find[] = ']]>'; $replace[] = ']]>'; return $string = str_replace($find, $replace, $string); } // XML出力 echo fixCDATA($xml->asXml()); |
本番の動作環境はよく調べましょうというお話。