PHP マニュアル
前のページ |  | 次のページ

# XCIX. SimpleXML関数

# 導入

警告
このモジュールは、 実験的なものです。これは、これらの関数の動作、関 数名は、このドキュメントに書かれて事項と同様に告知なく将来的なPHPのリ リースで変更される可能性があります。注意を喚起するとともに、このモジュー ルは使用者のリスクで使用して下さい。

SimpleXML拡張モジュールは、 XMLをオブジェクトにとても簡単かつ容易に変換するための機能を 提供します。変換後のオブジェクトでは、 通常のプロパティセレクタや配列反復子を用いて処理を行うことが 可能です。

# インストール手順

この拡張モジュールは、PHPの configure に `--enable-simplexml` を 指定して実行された場合のみ利用可能です。PHPのconfigureスクリプト はデフォルトでこれを行います。

# 例

このリファレンスの多くの例ではXML文字列を必要とします。各例で この文字列をくり返す代わりに、あるファイルにこの文字列を保存して、 各例で読みこむことにします。この読みこまれるファイルは、以下の例 に関するセクションで使用されます。 もしくは、XMLドキュメントを作成し、 simplexml_load_file() により読みこむことも 可能です。

例 1. XML文字列を設定するインクルードファイル example.php

`<?php
$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<movies>
<movie>
<title>PHP: Behind the Parser</title>
<characters>
<character>
<name>Ms. Coder</name>
<actor>Onlivia Actora</actor>
</character>
<character>
<name>Mr. Coder</name>
<actor>El Act&#211;r</actor>
</character>
</characters>
<plot>
So, this language. It's like, a programming language. Or is it a
scripting language? All is revealed in this thrilling horror spoof
of a documentary.
</plot>
<rating type="thumbs">7</rating>
<rating type="stars">5</rating>
</movie>
</movies>
XML;
?>`

SimpleXMLの容易さが最も明確に現われるのは、 簡単なXMLドキュメントから文字列または数字を展開する時です。

例 2. `<plot>` を取得する

`<?php include 'example.php'; $xml = simplexml_load_string($xmlstr); echo $xml->movie[0]->plot; // "So this language. It's like..." ?>`

例 3. SimpleXMLでユニークでない要素にアクセスする

単一の親要素の子要素としてある要素のインスタンスが複数存在する時、 通常の反復処理を適用することができます。

`<?php include 'example.php'; $xml = simplexml_load_string($xmlstr); /* For each <movie> node, we echo a separate <plot>. */ foreach ($xml->movie as $movie) { echo $movie->plot, '<br />'; } ?>`

例 4. 属性を使用する

ここまでは、要素の名前と値を読む方法のみを扱って来ました。 SimpleXMLは要素の属性にアクセスすることも可能です。 要素の属性にアクセスする方法は、配列 の要素に アクセスするのと全く同じです。

`<?php include 'example.php'; $xml = simplexml_load_string($xmlstr); /* Access the <rating> nodes of the first movie. * Output the rating scale, too. */ foreach ($xml->movie[0]->rating as $rating) { switch((string) $rating['type']) { // Get attributes as element indices case 'thumbs': echo $rating, ' thumbs up'; break; case 'stars': echo $rating, ' stars'; break; } } ?>`

例 5. 要素および属性をテキストと比較する

要素または属性を文字列と比較する、もしくは、文字列を引数とする関数に 渡すには、`(string)` により文字列にキャストする 必要があります。さもないと、PHPはこの要素をオブジェクトとして扱います。

`<?php include 'example.php'; $xml = simplexml_load_string($xmlstr); if ((string) $xml->movie->title == 'PHP: Behind the Parser') { print 'My favorite movie.'; } htmlentities((string) $xml->movie->title); ?>`

例 6. Xpathの使用

SimpleXMLには、Xpathをサポートしています。 `<character>` 要素を全て見つけるには、 以下のようにします。

`<?php include 'example.php'; $xml = simplexml_load_string($xmlstr); foreach ($xml->xpath('//character') as $character) { echo $character->name, 'played by ', $character->actor, '<br />'; } ?>`

'`//`' はワイルドカードとして動作します。絶対パスを指定するには、 スラッシュを一つだけにします。

例 7. 値を設定する

SimpleXMLの中のデータは、定数とすることができません。 オブジェクトは、その全ての要素について変更が可能です。

`<?php include 'example.php'; $xml = simplexml_load_string($xmlstr); $xml->movie[0]->actor[0]->age = '21'; echo $xml->asXML(); ?>`

上のコードは、元のXMLドキュメントと全く同じXMLドキュメントを新規に 出力しますが、新しいXMLファイルでは、Ms. Coderの年齢が21と定義されている ところが異なります。

例 8. DOMとの相互運用性

PHPは、SimpleXML形式とDOM形式の間でXMLノードを変換する機構を有しています。 この例では、DOM要素をSimpleXMLに変換することができます。

`<?php $dom = new domDocument; $dom->loadXML('<books><book><title>blah</title></book></books>'); if (!$dom) { echo 'Error while parsing the document'; exit; } $s = simplexml_import_dom($dom); echo $s->book[0]->title; ?>`

前のページ | ホーム | 次のページ
shmop_write | 上に戻る | simplexml_element->asXML