ホームページ >バックエンド開発 >XML/RSS チュートリアル >PHP拡張のXML操作(1)-SimpleXML
SimpleXML 拡張機能は、XML を一般的な属性セレクターと配列イテレーターを備えたオブジェクトに変換できる、非常にシンプルで使いやすいツールセットを提供します。
この拡張機能には libxml PHP 拡張機能が必要です。これは、--enable-libxml を使用する必要があることを意味しますが、libxml はデフォルトで有効になっているため、これは暗黙的に行われます。
PHP5 以降が必要です。
この拡張機能はデフォルトで有効になっており、コンパイル時に次のオプションを使用して無効にできます: --disable-simplexml
例 #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Ó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> <great-lines> <line>PHP solves all my web problems</line> </great-lines> <rating type="thumbs">7</rating> <rating type="stars">5</rating> </movie> </movies> XML; ?>
SimpleXML の単純さは、基本的な XML ドキュメントから文字列または数値を抽出するときに最もよくわかります。
例 #2 a82a54010e8e844b28dec6f52c796df1
<?phpinclude 'example.php'; $movies = new SimpleXMLElement($xmlstr); echo $movies->movie[0]->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.
PHP の命名規則で許可されていない文字 (ハイフンなど) を含む XML ドキュメント内の要素にアクセスするには、要素名を中かっことアポストロフィでカプセル化します。
例 #3 15a73cc5312745b1b00671f6e690e36a
<?phpinclude 'example.php'; $movies = new SimpleXMLElement($xmlstr); echo $movies->movie->{'great-lines'}->line;?>の取得
上記の例 ルーチンは次の出力を行います:
PHP solves all my web problems
例 #4 SimpleXML 内の非固有要素へのアクセス
要素の複数のインスタンスが 1 つの親要素の子として存在する場合、通常の反復手法が適用されます。上記のルーチンは出力します:
<?phpinclude 'example.php'; $movies = new SimpleXMLElement($xmlstr); /* For each <character> node, we echo a separate <name>. */foreach ($movies->movie->characters->character as $character) { echo $character->name, ' played by ', $character->actor, PHP_EOL;} ?>
注:
プロパティ (前の例の $movies->movie) は配列ではなく、反復可能でアクセス可能なオブジェクトです。
例 5 属性の使用ここまででは、要素名とその値を読み取る作業のみを説明しました。SimpleXML は、配列の要素と同じように要素の属性にアクセスすることもできます。
Ms. Coder played by Onlivia Actora Mr. Coder played by El ActÓr
上記のルーチンは次のように出力します。 #6 要素と属性をテキストと比較する
要素または属性を文字列と比較するか、文字列を必要とする関数に渡すには、(string) を使用して文字列にキャストする必要があります。それ以外の場合、PHP は を処理します。
<?phpinclude 'example.php'; $movies = new SimpleXMLElement($xmlstr); /* Access the <rating> nodes of the first movie.* Output the rating scale, too. */ foreach ($movies->movie[0]->rating as $rating) { switch((string) $rating['type']) { // Get attributes as element indicescase 'thumbs':echo $rating, ' thumbs up'; break;case 'stars':echo $rating, ' stars';break;}} ?>上記のルーチンは次のように出力します:
7 thumbs up5 stars例 #7 2 つの要素の比較PHP 5.2.0 以降、2 つの SimpleXMLElement は同じ要素を指している場合でも異なるものとみなされます。上記のルーチンは出力します:
<?phpinclude 'example.php'; $movies = new SimpleXMLElement($xmlstr); if ((string) $movies->movie->title == 'PHP: Behind the Parser') {print 'My favorite movie.';} echo htmlentities((string) $movies->movie->title);?>例 #8 スラッシュの 1 つを使用します。
上記のルーチンは出力します:
My favorite movie.PHP: Behind the Parser例 #9 SimpleXML のデータは定数である必要はありません。オブジェクトでは、そのすべての要素を操作できます。
<?phpinclude 'example.php'; $movies1 = new SimpleXMLElement($xmlstr);$movies2 = new SimpleXMLElement($xmlstr); var_dump($movies1 == $movies2); // false since PHP 5.2.0?>上記のルーチンは次のように出力します:
bool(false)
例 #10 要素と属性の追加
PHP 5.1.3 以降、SimpleXML には子と属性を簡単に追加する機能が備わっています。 .<?phpinclude 'example.php'; $movies = new SimpleXMLElement($xmlstr); foreach ($movies->xpath('//character') as $character) { echo $character->name, 'played by ', $character->actor, PHP_EOL;}?>上記のルーチンは次の出力を行います:
Ms. Coder played by Onlivia Actora Mr. Coder played by El ActÓr
例 #11 DOM の相互運用性
PHP には、SimpleXML 形式と DOM 形式の間で XML ノードを変換するメカニズムがあります。この例では、DOM 要素を SimpleXML に変更する方法を示します。 <?phpinclude 'example.php';$movies = new SimpleXMLElement($xmlstr);
$movies->movie[0]->characters->character[0]->name = 'Miss Coder';
echo $movies->asXML();?>
上記のルーチンは出力します:
3e5184b51d19bd3b3173071244ff71fe eab6e99f51fee68293d1126fa516c747 8adf8e6c41d19c74d254355bd9d9c69e b2386ffb911b14667cb8f0f91ea547a7PHP: Behind the Parser6e916e0f7d1e588d4f442bf645aedb2f c3ae6056e653b437c6b27357b7e7671a db0c08544b71179f3fd0e855bd613a1b 8a11bc632ea32a57b3e3693c7987c420Miss Coderdf406f776eecbaf16b62325323196f14 194eaccae6455d5c407b1ac2afe04cd0Onlivia Actorac0d1bcc4fa4e9e034ebc23e1ef89e5c2 66707054a46c2dec1bf24d9318ba1124 db0c08544b71179f3fd0e855bd613a1b 8a11bc632ea32a57b3e3693c7987c420Mr. Coderdf406f776eecbaf16b62325323196f14 194eaccae6455d5c407b1ac2afe04cd0El ActÓrc0d1bcc4fa4e9e034ebc23e1ef89e5c2 66707054a46c2dec1bf24d9318ba1124 aabc3226380a602ad187eb87d5efa83f a82a54010e8e844b28dec6f52c796df1 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. fa8825681e04013deb51ef36ab6dbac6 54a9d3919a9de3703b391ab1e4eaee87 15a73cc5312745b1b00671f6e690e36aPHP solves all my web problems6e6d7ec7f2f63fbe473136c2c34a55b7 c0dd7eda886ba0d09f5a00454545474c e27af9d8c16e5d4022ce762c86f195be79df14055a92f49c29299ca2d367bde62 b724a65f9508b61211142b27c8620c4659df14055a92f49c29299ca2d367bde62 96664a6d22a82ab9c28a528afca408bc c3a75a871bc1ee80ecb54700c0759808
XML エラーの処理
例 #1 破損した XML 文字列の読み込み<?phpinclude 'example.php';$movies = new SimpleXMLElement($xmlstr);
$character = $movies->movie[0]->characters->addChild('character');$character->addChild('name', 'Mr. Parser');
$character->addChild('actor', 'John Doe');
$rating = $movies->movie[0]->addChild('rating', 'PG');$rating->addAttribute('type', 'mpaa');
echo $movies->asXML();?>
上記のルーチンは出力します:
3e5184b51d19bd3b3173071244ff71fe eab6e99f51fee68293d1126fa516c747 8adf8e6c41d19c74d254355bd9d9c69e b2386ffb911b14667cb8f0f91ea547a7PHP: Behind the Parser6e916e0f7d1e588d4f442bf645aedb2f c3ae6056e653b437c6b27357b7e7671a db0c08544b71179f3fd0e855bd613a1b 8a11bc632ea32a57b3e3693c7987c420Ms. Coderdf406f776eecbaf16b62325323196f14 194eaccae6455d5c407b1ac2afe04cd0Onlivia Actorac0d1bcc4fa4e9e034ebc23e1ef89e5c2 66707054a46c2dec1bf24d9318ba1124 db0c08544b71179f3fd0e855bd613a1b 8a11bc632ea32a57b3e3693c7987c420Mr. Coderdf406f776eecbaf16b62325323196f14 194eaccae6455d5c407b1ac2afe04cd0El ActÓrc0d1bcc4fa4e9e034ebc23e1ef89e5c2 66707054a46c2dec1bf24d9318ba1124 db0c08544b71179f3fd0e855bd613a1b8a11bc632ea32a57b3e3693c7987c420Mr. Parserdf406f776eecbaf16b62325323196f14194eaccae6455d5c407b1ac2afe04cd0John Doec0d1bcc4fa4e9e034ebc23e1ef89e5c266707054a46c2dec1bf24d9318ba1124aabc3226380a602ad187eb87d5efa83f a82a54010e8e844b28dec6f52c796df1 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. fa8825681e04013deb51ef36ab6dbac6 54a9d3919a9de3703b391ab1e4eaee87 15a73cc5312745b1b00671f6e690e36aPHP solves all my web problems6e6d7ec7f2f63fbe473136c2c34a55b7 c0dd7eda886ba0d09f5a00454545474c e27af9d8c16e5d4022ce762c86f195be79df14055a92f49c29299ca2d367bde62 b724a65f9508b61211142b27c8620c4659df14055a92f49c29299ca2d367bde62 8f35ab349d6453d281f32443bf3504f4PG9df14055a92f49c29299ca2d367bde6296664a6d22a82ab9c28a528afca408bc c3a75a871bc1ee80ecb54700c07598083 つの関連関数
simplexml_import_dom — 入手domnode. simplexml_load_fileからのシンプルなオブジェクト - xmlファイルをオブジェクトに解釈します
simplexml_load_string - xmlの文字列をオブジェクト、関連するクラスおよびメンバー機能に解釈しますclass
SimpleXMLE element::addAttribute — SimpleXML 要素に属性を追加します
SimpleXMLElement::count — 要素の子をカウントします
SimpleXMLElement::getNamespaces — ドキュメントで使用されている名前空間を返します
SimpleXMLElement::registerXPathNamespace — 次の XPath クエリのプレフィックス/ns コンテキストを作成します
SimpleXMLElement::saveXML — 别名 SimpleXMLElement::asXML
SimpleXMLElement::__toString — 文字列の内容を返します
SimpleXMLElement::xpath — XML データに対して XPath クエリを実行します
SimpleXMLIterator类
SimpleXMLIterator::current — 現在の要素を返します
SimpleXMLIterator::getChildren — サブ要素を返します現在の要素の
SimpleXMLIterator::hasChildren — 現在の要素にサブ要素があるかどうかを確認します
SimpleXMLIterator::key — 現在のキーを返します
SimpleXMLIterator::next — 次の要素に移動します
Simple XMLイテレータ:: rewind — 最初の要素に巻き戻します
SimpleXMLIterator::valid — 現在の要素が有効かどうかを確認します
以上はPHP扩展のXML操作(一)—SimpleXMLの内容、その他の内容请关注PHP中文网(m.sbmmt.com)!