PHP5.0.0のDOM Functionに関する諸情報

ページ情報
制作日
2004-07-21
最終更新日
2004-07-21
参照用URI
http://www.arielworks.net/articles/2004/0721a
分野
ページ内目次

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:spacepreserveになっている範囲の空白ノードは保持される。

child_nodes()

first_child()last_childなどはメソッドではなくなったので()を付けるとエラーになる。

$node_list = $DOMNode->firstChild

$node_listにノードリストが格納される。

XSL文章の基底URI

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の仕様書から必要なメソッドを探すことも出来る。

連絡先、リンク、転載や複製などについては「サイト案内」をご覧ください。Powered by HIMMEL