|
いままで XML を扱う際に、PHP4.x では DOM XML を、PHP5.x では SimpleXML を利用してきた。 これらは便利な関数群だが、XML要素名にコロン「:」を含む場合、そのままでは扱うことができない。たとえば RSS 1.0 では、"dc:date" のように、コロンを含む要素名があり、処理に工夫が必要だ。 今回は、要素名にコロン「:」を含む XML の扱い方を紹介する。 |
サンプル・プログラム「RSS 1.0 ビューア」 |
|
|
RSS1.0(RDF)を読み込み、その内容を表示するプログラムである。 冒頭で述べたように、コンテンツの更新日を示す要素 "dc:date" の処理で工夫が必要だ。 |
|
サンプル・プログラムの解説:DOM XMLの場合 |
|
|
RSS1.0 の内容を配列変数に格納するユーザー関数が getRDF である。 内部では、PHP 4.x の場合と PHP 5.x の場合とで処理を分岐させている。 関数 get_elements_by_tagname では、要素名にコロンを含む場合、コロンの右側を認識する。そこで、get_elements_by_tagname('date') としてやれば、要素 "dc:date" の値を取得することができる。 なお、配列変数 $arr:blue] に代入する際にいちいち関数 htmlspecialchars を適用しているのは、クロスサイトスクリプティング対策のためである。
0065: $dom = read_xml($url); //DOM XML利用 |
|
サンプル・プログラムの解説:SimpleXMLの場合 |
|
|
SimpleXML の場合、"$rdf->item[$i]->dc:date" では要素の内容を取得することができない。children メソッドを使う必要がある。
children メソッドは、引数に名前空間を指定する必要がある。RSS 1.0 では、dc の名前空間は xmlns:dc="http://purl.org/dc/elements/1.1/"と定義されているので、これを引数として指定する。 children メソッドで子ノード $node を取得したら、"$node->dc" と指定することで、要素 "dc:date" の内容を取り出すことができる。
0090: $rdf = simplexml_load_file($url); //SimpleXML 利用 |
|
参考サイト |
|
参考書籍 |
|
|
|
|
|
|
|
|
2008年07月17日更新
写真と記事 (C)2008 studio pahoo
(※)本ページはリンクフリーですが、複製・転載時にはご一報ください。 |