PHP4系列からDOMの仕様が大分変わったため、移行が若干面倒だ。消滅してしまったメソッドもある。
ツリーを文字列に変換する際、PHP4は
$DOMObject->dump_mem(TRUE, "UTF-8")
のようにエンコーディングを指定できた。エンコーディングを指定しないと環境によっては文字が実態参照に変換される場合があるのはPHP5.0.0でも同様だが、
$DOMObject->saveXML()
は引数にエンコーディングを持つことが出来ない。PHP5.0.0では変数でエンコーディングを指定することになる。
$DOMObject->encoding = string encoding;
この変更はDOM3の草案によるようだが、なんと勧告ではさらに変更になっている。将来的にはPHP側でも変更になるだろう。
これもPHP4では引数として値を渡していたが、PHP5では変数となった。
$DOMObject->formatOutput = TRUE;
で設定できる。なお、xml:space
の値は無視されるようだ。
PHP4では
domxml_open_file(str filename, DOMXML_LOAD_DONT_KEEP_BLANKS)
でツリー制作時に空白ノードを除去できた。PHP5ではこれもやはり変数で設定することになる。
$DOMObject->preserveWhiteSpace = FALSE;
FALSE
にすることで空白ノードが除去される。xml:space
がpreserve
になっている範囲の空白ノードは保持される。
child_nodes()
系first_child()
やlast_child
などはメソッドではなくなったので()
を付けるとエラーになる。
$node_list = $DOMNode->firstChild
で$node_list
にノードリストが格納される。
XSL Functionで使うXSL文章はDOMオブジェクトとして渡す必要がある。XSLT文章を
$DOMObject->loadXML(string source)
で文字列からロードする場合、引数ではdocument()
などで使われる基底URIが設定できない。PHP5.0.0では変数として設定することになる。
$DOMObject->documentURI = "/foo/bar.xsl";
一部のメソッドは消滅した。例えばPHP4のset_name()
はPHP5.0.0には存在しない上代替メソッドもない。
renameNode()
というメソッドがDOM Level3には存在するが、PHP5.0.0はDOM Level2までしかサポートしていないため、まだ実装されていない。
「あの機能は何処へ行った」と思ったらソースコードをgrepしてみると見つかることが多い。マニュアルに記載されていない情報がかなり得られるので是非ともお奨めしたい。DOM Level3の内容も一部実装されている。
また、PHP5からはかなりDOMの仕様に忠実になったためDOMの仕様書から必要なメソッドを探すことも出来る。