*

第11章 XMLのパースと生成

公開日: : 最終更新日:2014/04/07 PHP 公式資格教科書

Bookmark this on Google Bookmarks
Bookmark this on Yahoo Bookmark

XMLとは<要素名>から始まり</要素名>で終わるのが1つの要素となります。

要素の中には複数の子要素を持つことができる為、
ツリー構造(木構造)の複雑なデータ構造も表現する事ができる。
その汎用性の高さから、異なるOSやシステム間でデータを交換する際に使われることが
多くなっている。

SimpleXMLを使った文字列のパース

文字列のXMLをパースするには、simplexml_load_string()関数を利用する。
関数の引数に文字列を指定すると、
SimpleXMLのオブジェクトを作成して返す。
そして、このオブジェクトには、パースしたXMLと同じ構造の
プロパティが設定される。

<meta charset=”utf-8″><pre><?php
// XMLの文字列
$xml_str = <<< END_OF_XML
<channel>
<title>天気予報</title>
<link>http://weather.example.com/</link>
<description>最新の天気予報を紹介しています。</description>
</channel>
END_OF_XML;
// パースする
$xml = simplexml_load_string($xml_str);
// XMLの内容を表示する
echo “件 名 : “.$xml->title.”\n”;
echo “リンク : “.$xml->link.”\n”;
echo “説 明 : “.$xml->description.”\n”;

このように、simple_load_string()関数の戻り値である、SimpleXMLのオブジェクト$xmlに対して
「$xml->title」とか「$xml->link」のような形式でXMLの要素の内容を取り出す事が出来るようになっている。

XMLの複雑な要素へのアクセス

以下は天気予報の要約を配信しているRSSをパースすることを
想定している。
XMLの文字列を、simplexml_load_string()関数を使って
パースするところまでは、前のプログラムと同じ。

<meta charset=”utf-8″><pre><?php
// XMLの文字列
$xml_str = <<< END_OF_XML
<?xml version=”1.0″ encoding=”utf-8″ ?>
<rss version=”2.0″>
<channel>
<title>天気予報</title>
<link>http://weather.example.com/</link>
<description>最新の天気予報を紹介しています。</description>
<item>
<title>3月14日の天気</title>
<link>http://weather.example.com/0314</link>
<description>3月14日 晴れ</description>s
</item>
<item>
<title>3月15日の天気</title>
<link>http://weather.example.com/0315</link>
<description>3月15日 雨</description>s
</item>
</channel>
</rss>
END_OF_XML;
// パースする
$xml = simplexml_load_string($xml_str);

このRSSでは、RSSのバージョンが指定されている。
XMLのルート要素<rss>にあるversion属性を、
配列にあるインデックスのようにアクセスする事が出来る。

echo $xml[“version”]:    //表示結果 →2.0

また、<channel>要素の下に複数の<item>タグが存在する。
この<item>タグオブジェクトを得るには、
配列の要素番号で何番目が必要なのかを指定する。

echo $xml->channel->item[0].”/n”;   //3月14日の天気
echo $xml->channel->item[1].”/n”;   //3月15日の天気

配列番号でアクセスできるという事は、
foreach文などを使って、繰り返し処理もできる。

SimpleXMLでXMLの出力

パースした内容に加え、再度、XMLで書きだすことも可能。
この場合、SimpleXMLのオブジェクトのasXML()メゾットを
呼ぶことでXMLを書きだす事が出来る。

<meta charset=”utf-8″><pre><?php
// XMLの文字列
$xml_str = <<< END_OF_XML
<channel>
<title>天気予報</title>
<link>http://weather.example.com/</link>
<description>最新の天気予報を紹介しています。</description>
</channel>
END_OF_XML;
// パースする
$xml = simplexml_load_string($xml_str);
// 内容を変更する
$xml->title = “お天気情報”;
$xml->link = “http://example.com/tenki“;
// XMLとして出力する
echo $xml->asXML();

 

スポンサーリンク

 

関連記事

PHP資格試験

第7章 データベース データーベースとは

データーベースが必要な理由 1.効率よくデータを扱う事が出来る。 処理速度が速い。 2.デ

記事を読む

PHP資格試験

第5章 関数 関数の宣言と呼び出し

関数とは計算や処理をひとまとまりにしたもの。 PHPではあらかじめ多くの関数を提供している。 似

記事を読む

PHP資格試験

第4章 1)配列について

  配列について 配列とは複数の要素を持つことのできる値。 各要素はキー(key)と

記事を読む

PHP資格試験

第6章 Webフォームの作成 1)

PHPでは、ユーザが送信した値は、自動的にグローバル変数の$_GETあるいは$_POSTに連想配列の

記事を読む

PHP資格試験

第1章 PHPとは

1-1PHPとは PHPの概要 Webアプリケーションの開発に適したスクリプト言語。 PHP(

記事を読む

PHP資格試験

第2章 テキストの操作

文字列と文字列の結合 文字列と文字列の結合にはドット演算子「.」を使用。 数値や数値が格納さ

記事を読む

PHP資格試験

第2章 テキストについて

テキストと数の操作 文字列の記述方法 echoコマンドでは 2重引用符の文字列では、変数を展開

記事を読む

PHP資格試験

$_SERVER変数について

PHPで自ページから自ページへpost,getさせる時、 AタグやFORMタグに$_SERVERを使

記事を読む

PHP資格試験

第4章 2)多次元配列

配列の要素の中に別の配列を代入。 例: <pre><?php $users

記事を読む

PHP資格試験

第6章 Webフォームの作成 2)

$_GETと$_POSTの処理 変数$_GETと$_POSTをなぜ使い分ける必要があるのか。

記事を読む

MySQL
MYSQLのコマンド入力で「;」セミコロンを入力し忘れた時抜け出す方法

これは僕のメモです。   MYSQLのコマンド入

MySQL
MySQLのコマンドプロンプトでのバックアップとリストア

これは自分のメモです バックアップ 1.管理者 で コマンドプロン

マザーボードが壊れた
Windows8のパソコンが壊れた->パソコン壊れて分かったこと

Windows10へ変えようと思いメモリーを増やした。 現在8GB-

光は早い、というのは、すでに昔の言葉ではないか。
光は早い、というのは、すでに昔の言葉ではないか。

今日、巨人VS阪神 画面はテレビ、音声はラジコ で聞こうと思ったら

サイトの表組みを取り込むその3
表組みのサイトをexcelに取り込んでURLまで抽出する

これは、僕のメモです。   1.コピーするサイト

→もっと見る

PAGE TOP ↑