SimpleXMLの履歴
エラー抑制
libxml_use_internal_errors(true); // 抑制開始 libxml_use_internal_errors(false); // 終了
読み込み
間違ってると読めないので、その可能性があるデータはあらかじめtidyで処理しておく。
$xml = simplexml_load_string($str);
第三引数のオプション
http://jp2.php.net/manual/ja/libxml.constants.php
LIBXML_NOCDATA CDATA をテキストノードとしてマージ
LIBXML_NOXMLDECL ドキュメントの保存時に XML 宣言を削除する
文字列にする
キャストする。__toString()でないのがたるい。
$str = (string) $node;
名前空間付XMLを処理する
前提としてxmlnsで名前空間の定義がされてないとparseしてくれないっぽい。こういうの
<root xmlns:dc="http://purl.org/dc/elements/1.1/></root>
で、getDocNamespacesで名前空間取得して、registerXPathNamespaceするって書いてるとこあるけど、$node->children($namespaceUri); で取れました!(5.2.10で確認)
dc:dateのみ取得
$ns = $xml->getDocNamespaces(); foreach ($xml->item as $item){ echo (string) $item->children($ns['dc'])->date; }