PHP拡張のXML操作(1)-SimpleXML

黄舟
リリース: 2018-05-17 09:38:18
オリジナル
5241 人が閲覧しました


1. 概要とインストール

SimpleXML 拡張機能は、XML を一般的な属性セレクターと配列イテレーターを備えたオブジェクトに変換できる、非常にシンプルで使いやすいツールセットを提供します。

この拡張機能には libxml PHP 拡張機能が必要です。これは、--enable-libxml を使用する必要があることを意味しますが、libxml はデフォルトで有効になっているため、これは暗黙的に行われます。

PHP5 以降が必要です。

この拡張機能はデフォルトで有効になっており、コンパイル時に次のオプションを使用して無効にできます: --disable-simplexml

2. 使用例

基本的な使用方法

例 #1 XML 文字列を含むファイル example.php をインクルードします。

<?php
$xmlstr = <<<XML
<?xml version=&#39;1.0&#39; standalone=&#39;yes&#39;?>
<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&#39;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 &#39;example.php&#39;;
$movies = new SimpleXMLElement($xmlstr);
echo $movies->movie[0]->plot;?>
ログイン後にコピー

を取得する上記のルーチンは出力します:

   So, this language. It&#39;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 &#39;example.php&#39;;
$movies = new SimpleXMLElement($xmlstr);
echo $movies->movie->{&#39;great-lines&#39;}->line;?>
ログイン後にコピー
の取得

上記の例 ルーチンは次の出力を行います:

PHP solves all my web problems
ログイン後にコピー

例 #4 SimpleXML 内の非固有要素へのアクセス

要素の複数のインスタンスが 1 つの親要素の子として存在する場合、通常の反復手法が適用されます。上記のルーチンは出力します:

<?phpinclude &#39;example.php&#39;;
$movies = new SimpleXMLElement($xmlstr);
/* For each <character> node, we echo a separate <name>. */foreach ($movies->movie->characters->character as $character) {
echo $character->name, &#39; played by &#39;, $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 &#39;example.php&#39;;
$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[&#39;type&#39;]) { // Get attributes as element indicescase &#39;thumbs&#39;:echo $rating, &#39; thumbs up&#39;;
break;case &#39;stars&#39;:echo $rating, &#39; stars&#39;;break;}}
?>
ログイン後にコピー

上記のルーチンは次のように出力します:

7 thumbs up5 stars
ログイン後にコピー
例 #7 2 つの要素の比較

PHP 5.2.0 以降、2 つの SimpleXMLElement は同じ要素を指している場合でも異なるものとみなされます。上記のルーチンは出力します:

<?phpinclude &#39;example.php&#39;;
$movies = new SimpleXMLElement($xmlstr);
if ((string) $movies->movie->title == &#39;PHP: Behind the Parser&#39;) {print &#39;My favorite movie.&#39;;}
echo htmlentities((string) $movies->movie->title);?>
ログイン後にコピー
例 #8 スラッシュの 1 つを使用します。

上記のルーチンは出力します:

My favorite movie.PHP: Behind the Parser
ログイン後にコピー

例 #9 SimpleXML のデータは定数である必要はありません。オブジェクトでは、そのすべての要素を操作できます。

<?phpinclude &#39;example.php&#39;;
$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 &#39;example.php&#39;;
$movies = new SimpleXMLElement($xmlstr);
foreach ($movies->xpath(&#39;//character&#39;) as $character) {
echo $character->name, &#39;played by &#39;, $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 &#39;example.php&#39;;$movies = new SimpleXMLElement($xmlstr);
$movies->movie[0]->characters->character[0]->name = &#39;Miss Coder&#39;;
echo $movies->asXML();?>
ログイン後にコピー
上記のルーチンは出力します:



 
  PHP: Behind the Parser
  
   
    Miss Coder
    Onlivia Actora
   
   
    Mr. Coder
    El ActÓr
   
  
  
   So, this language. It&#39;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 &#39;example.php&#39;;$movies = new SimpleXMLElement($xmlstr);
$character = $movies->movie[0]->characters->addChild(&#39;character&#39;);$character->addChild(&#39;name&#39;, &#39;Mr. Parser&#39;);
$character->addChild(&#39;actor&#39;, &#39;John Doe&#39;);
$rating = $movies->movie[0]->addChild(&#39;rating&#39;, &#39;PG&#39;);$rating->addAttribute(&#39;type&#39;, &#39;mpaa&#39;);
echo $movies->asXML();?>
ログイン後にコピー
上記のルーチンは出力します:



 
  PHP: Behind the Parser
  
   
    Ms. Coder
    Onlivia Actora
   
   
    Mr. Coder
    El ActÓr
   
  Mr. ParserJohn Doe
  
   So, this language. It&#39;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
ログイン後にコピー

3 つの関連関数

simplexml_import_dom — 入手domnode.

simplexml_load_fileからのシンプルなオブジェクト - xmlファイルをオブジェクトに解釈します

simplexml_load_string - xmlの文字列をオブジェクト、関連するクラスおよびメンバー機能に解釈しますclass

SimpleXMLE element::addAttribute — SimpleXML 要素に属性を追加します

SimpleXMLElement::addChild — XML ノードに子要素を追加します
  • SimpleXMLElement::asXML — 整形式のsimplexml要素に基づくxml文字列elements simplexmlement ::属性 - 要素の属性を識別するcimplexmlement :: children - 与えられたnodeの子どもを見つけます:simplexmlelement :: __ construment - 新しいsimplexmlelementオブジェクトを作成します
  • SimpleXMLElement::count — 要素の子をカウントします
  • SimpleXMLElement::getDocNamespaces — document で宣言された名前空間を返します

SimpleXMLElement::getName — XML 要素の名前を取得します

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)!

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート