[PHP]DOMとSimpleXMLの相互変換

PHPではバージョン5.0以降でSimpleXML拡張モジュールというものが追加されました。
SimpleXMLを使用すると、これまでのDOMオブジェクトに比べてXMLの操作が容易になります。

ですが、古いバージョンを元にしたライブラリではDOMベースのプログラムも少なくありません。
そこで今回はDOMとSimpleXMLの相互変換関数を確認しておきます。



SimpleXML -> DOM


SimpleXMLからDOMの変換はdom_import_simplexml関数を使用します。

関数仕様

DOMElement dom_import_simplexml( SimpleXMLElement $node )



プログラム例

// SimpleXMLオブジェクトを作成
$xmlStr = '<items><item>item1</item><item>item2</item></items>';
$sxml = simplexml_load_string( $xmlStr );
 
// DomNodeオブジェクトに変換
$dxml = dom_import_simplexml( $sxml );
 
// 変換後のオブジェクトから情報を取得
foreach( $dxml->childNodes as $data ) {
    echo( $data->getNodePath() . ": " . $data->C14N() . "\n" );
}



実行結果

/items/item[1]: <item>item1</item>
/items/item[2]: <item>item2</item>





DOM -> SimpleXML


逆にDOMからSimpleXMLに変換する場合は、simplexml_import_dom()です。

関数仕様

SimpleXMLElement simplexml_import_dom ( DOMNode $node [, string $class_name = "SimpleXMLElement" ] )



プログラム例

// DOMオブジェクトを作成
$xmlStr = '<items><item>item1</item><item>item2</item></items>';
$dxml   = new DOMDocument;
$dxml->loadXML( $xmlStr );
 
// SimpleXmlオブジェクトに変換
$sxml = simplexml_import_dom( $dxml );
 
// 変換後のオブジェクトをダンプ
var_dump( $sxml );



実行結果

object(SimpleXMLElement)[2]
  public 'item' => 
    array
      0 => string 'item1' (length=5)
      1 => string 'item2' (length=5)

関連記事

コメントを残す

メールアドレスが公開されることはありません。