SimpleXMLの履歴

PHPXMLを簡単に読み書きできるようにするライブラリ

エラー抑制

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;
}