PHP5でいろいろわかったこと

DOMの扱いかた

PHP5のヘルプにはXML関連の記述がたくさんあってどれがどれだかわからなかったのだが、ヘルプのXXX.DOM関数を見るとすべて載っていた。XXXI.DOM XML関数は以前の拡張モジュールであってPHP5の標準ではない。

空白のテキストノード

XMLファイルから何も気にせずDOMへロードしようとすると空白がテキストノードとして取り出され、childNodesでループを回すときに面倒くさい。以下のようにpreserveWhiteSpaceをfalseにしてから読み込むとすっきりする。formatOutputをtrueにすると書き込み時にはインデントをつけてくれる。

$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->load("data.xml")

SimpleXMLの扱いかた

データの取出しが恐ろしく簡単。びびった。

PHP5のマニュアル

公式サイトにchm形式とhtml形式があるが、chm形式の方はXXX.DOM関数の和訳が終わっていなかった。

SimpleXMLとDOMの相互変換

今の問題はSimpleXMLを使ってロードした後にDOMツリーに変換し、それにノードを加えて出力すると上述のpreserveWhiteSpaceやformatOutputに関わらず、下のように加えた部分だけインデントされないこと。

<?xml version="1.0" encoding='utf-8'?>
<UserRoot>
  <Record>
    <UserID>1</UserID>
    <UserName>hoge</UserName>
    <PassWord>foo</PassWord>
    <Authority>3</Authority>
  </Record>
<Record><UserID>20</UserID><UserName>hello</UserName><PassWord>world</PassWord><Authority>2</Authority></Record></UserRoot>