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
<?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
<?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
<?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);?>
上記のルーチンは出力します:
My favorite movie.PHP: Behind the Parser
<?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();?>
PHP: Behind the Parser Miss Coder Onlivia Actora Mr. Coder El ActÓr 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 solves all my web problems 7 5
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();?>
PHP: Behind the Parser Ms. Coder Onlivia Actora Mr. Coder El ActÓr Mr. Parser John Doe 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 solves all my web problems 7 5 PG
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)!