PHP XML操作のさまざまなメソッドの分析(詳細)_PHPチュートリアル

WBOY
リリース: 2016-07-21 15:36:10
オリジナル
845 人が閲覧しました

XML は、データベースのような形式でデータを保存する、一般的な半構造化ファイル形式です。実際のアプリケーションでは、単純でセキュリティの低いデータが XML ファイル形式で保存されることがよくあります。この利点は、データベースとの対話操作を減らして読み取り効率を向上できる一方で、XML の利点を有効に活用してプログラム作成の難易度を軽減できることです。
PHP は XML ファイルを読み取るための完全なメソッド セットを提供し、XML ベースのスクリプトを簡単に作成できるようにします。この章では、PHP と XML の操作方法を紹介し、一般的に使用されるいくつかの XML クラス ライブラリについて簡単に説明します。
1 XML入門
XMLとは「eXtensible Markup Language」の略で、HTMLと似たマークアップ言語です。ただし、HTML とは異なり、XML は主にデータの記述とデータの保存に使用され、HTML は主にデータの表示に使用されます。
XML は、開発者がニーズに応じてタグ名を作成できるようにする「メタタグ」言語です。たとえば、次の XML コードを使用してメッセージを記述することができます。

コードをコピーします コードは次のとおりです:

ようこそ
guestbook!!

このうち、 および タグはこれをメッセージとしてマークします。メッセージにはタイトル、作成者、内容があり、メッセージメッセージを完全に表現します。
XML ファイルの先頭にある は通常、XML データの先頭を識別するために使用され、XML データは標準のバージョン情報を使用します。ブラウザーで XML ファイルにアクセスすると、図 1 に示すように、明確に階層化された XML データ情報を確認できます。
'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" border=0>
XMLは非常に急速に発展しています。近年、多くのソフトウェアが開発されています。開発 企業はアプリケーション開発に XML 開発標準を採用し始めており、多くの新興テクノロジーは XML データに基づいています。これは、XML が Web テクノロジーの不可欠な部分になることを意味します
2 単純な XML 操作
実際のアプリケーションでは、PHP と PHP の間の相互作用XML は非常に広く使われており、SimpleXML コンポーネントは、PHP5 に新たに追加されたシンプルな XML 操作コンポーネントです。
$data = <<


制作サポート


<シリアル番号>100001
サイモン
24年齢>
1982-11-06誕生日>
5000.00給与>
<ボーナス>1000.00


<シリアル番号>100002
エレイン
24年齢>
1982-01-01誕生日>
6000.00給与>
<ボーナス>2000.00




テストセンター


<シリアル番号>110001
ヘレン
23年齢>
1983-07-21誕生日>
5000.00給与>
<ボーナス>1000.00




XML;
$xml = simplexml_load_string($data); //SimpleXML オブジェクト
print_r($xml); //XML を出力します
?>
上の例では、$data は XML データを格納しています。

复制代
代码如下: SimpleXMLElement オブジェクト
(
[部門] => 配列
(
[0] => SimpleXMLElement オブジェクト
(
[名前] => 本番サポート
[emp忠実な人たち] => SimpleXMLElement オブジェクト
( [従業員] => 配列 (
[0] => SimpleXMLElement オブジェクト
( [シリアル番号] => 100001
[名前] => サイモン
[年齢] => 24
[誕生日] => 1982-11-06
[給与] => 1000.00
)
[1] => 100002
[名前] => エレイン
[年齢] => 24
[誕生日] => 1982-01-01
[給与] => 2000.00
)
)
)
[1] => SimpleXMLElement オブジェクト
(
[名前] => テスト センター
[従業員] => SimpleXMLElement オブジェクト
(
[従業員] => SimpleXMLElement オブジェクト
(
[シリアル番号] => 110001
) [name] =&gt =&gt =&gt; )
)


出力結果から分かるように、SimpleXML オブジェクトの構造は XML データの形式と完全に同じです。
simplexml_load_file(string filename)
ここでのファイル名の変更は、XML データ ファイルのファイル名とその場所の経路を保存するために使用されます。以下のコードは、simpleXML オブジェクトを作成するために使用されます。下:


$xml = simplexml_load_file('example.xml'); //SimpleXML オブジェクト
print_r($xml); //XML を出力します
?>


このうち、example.xmlに格納されているデータは上記の$dataと全く同じであり、実行結果も上記と全く同じです。
上記 2 つのメソッドは同じ機能を実装していますが、違いは XML のデータ ソースの違いにあります。 XML データ ソースが PHP スクリプト ファイル内にある場合は、simplexml_load_string を使用して作成する必要があります。 XML データ ソースが別の XML ファイルにある場合は、simplexml_load_file を使用して作成する必要があります。
2.2 SimpleXML オブジェクト内の XML データの読み取り
以前、SimpleXML オブジェクト内のデータを読み取るための print_r 関数の使用を紹介しましたが、返される結果は配列の構造に似ています。明らかに、この表示方法は実際のアプリケーションでは望ましくありません。ここでは、SimpleXML オブジェクト内の XML データを読み取る他のいくつかの方法を紹介します。
1. var_dump 関数は、SimpleXML オブジェクトの詳細情報を表示するために使用できます。その構文は次のとおりです。
void var_dump(object1, object2…)
次のコードは、var_dump 関数を使用して、上記の例のオブジェクトの詳細情報を出力します。

コードをコピーします コードは次のとおりです:

実行結果は以下の通りです。

コードをコピーします コードは次のとおりです:
object(SimpleXMLElement)#1 (1) { ["Depart"]=> array(2) {
[0]=> SimpleXMLElement)# 2 (2) {
["name"]=>
string(18) 「本番サポート」
["employees"]=>
object(SimpleXMLElement)#4 (1) {
["employee "]= >
array(2) {
[0]=>
object(SimpleXMLElement)#5 (6) {
["serial_no"]=>
string(6) “100001″
["name "]= >
string(5) “サイモン”
["age"]=>
string(2) “24″
["birthday"]=>
string(10) “1982-11-06 ''
[ "給与"]=>
文字列(7) "5000.00"
["ボーナス"]=>
文字列(7) "1000.00"
}
[1]=> 6 (6 ) {
["シリアル番号"]=>
文字列(6) "100002"
["名前"]=>
文字列(6) "エレイン"
["年齢"]=> (2) “24″
["birthday"]=>
string(10) “1982-01-01″
["salary"]=>
string(7) “6000.00″
["ボーナス"] =>
文字列(7) "2000.00"
}
}
}
[1]=>
オブジェクト(SimpleXMLElement)#3 (2) {
["名前"]=> ) "テスト センター"
["従業員"]=>
object(SimpleXMLElement)#7 (1) {
["従業員"]=>
object(SimpleXMLElement)#8 (6) {
["serial_no" ]=>
文字列(6) “110001″
["名前"]=>
文字列(5) “ヘレン”
["年齢"]=>
文字列(2) “23”
["誕生日"]= >
string(10) “1983-07-21″
["salary"]=>
string(7) “5000.00″
["bonus"]=>
string(7) “1000.00 ''
} }}}}


以前の print_r による出力結果と比較して、var_dump 関数の出力結果の構造はより厳密になり、オブジェクト内の各属性のデータ型が分析されます。実際のアプリケーションでは、プログラムのデバッグ中のオブジェクト検出に var_dump 関数がよく使用されます。
2. XMLデータ内のタグの読み取り
配列型の変数の操作と同様に、XMLの読み取りも同様の方法で行うことができます。たとえば、上記の XML データの各 "Depart" タグの下にある "name" 属性を読み取る必要がある場合は、次のコード
に示すように、foreach 関数を使用してそれを行うことができます。


コードをコピーします

コードは次のとおりです:
delivery as $a); { echo “$a- >name
”;
}
?>


実行結果は以下の通りです。
プロダクションサポート
テストセンター
//XMLファイルを読み取る//XMLデータ内の各パートタグをループします
//名前属性を出力します
角括弧「[]」を使用して、XMLデータで指定されたラベルを直接読み取ることもできます。次のコードは、上記の XML データの最初の「Depart」タグの「name」属性を出力します。



コードをコピー

コードは次のとおりです:
$xml = simplexml_load_file('example.xml') //XML ファイルを読み込みますecho $xml->Depart-> name[0]; //出力ノード
;
実行結果は以下の通りです。
プロダクションサポート
タグの下にあるすべての子タグについて、SimpleXML コンポーネントは読み取り用の子メソッドを提供します。たとえば、上記の XML データの「Depart」タグの場合、その下に「name」と「employees」という 2 つのサブタグがあります。次のコードは、最初の「Depart」タグの下のサブタグの読み取りを実装します。
コードをコピーします コードは次のとおりです:

$xml = simplexml_load_file('example.xml')
foreach ($xml->Depart->children(); as $Depart) //Departタグの下のサブタグを読み取るループ
{
var_dump($Depart) //タグのXMLデータを出力します
}
?>

実行結果は次のとおりです。 。
コードをコピーします コードは次のとおりです:

object(SimpleXMLElement)#3 (1) {
[0]=>string(18) "production support"
}
object(SimpleXMLElement) #5 ( 1) {
["従業員"]=>
array(2) {
[0]=>
object(SimpleXMLElement)#3 (6) {
["serial_no"]=> (6) 「100001″
["名前"]=>
文字列(5) 「サイモン」
["年齢"]=>
文字列(2) 「24″
["誕生日"]=>文字列(10) “1982-11-06”
["給与"]=>
文字列(7) "5000.00"
["ボーナス"]=>
文字列(7) "1000.00"
}
[1 ]=> ;
object(SimpleXMLElement)#6 (6) {
["serial_no"]=>
string(6) “100002″
["name"]=>
string(6) "エレイン"
["年齢 "]=>
文字列(2) "24"
["誕生日"]=>
文字列(10) "1982-01-01"
["給与"]=>
文字列(7) ) "6000.00 ″
["bonus"]=>
string(7) “2000.00″
}
}
}


Childrenメソッドを使用した後、すべてのサブタグが新しいものとして扱われることがわかります。 XMLファイルを扱います。
3. XML データ パスに基づくクエリ
SimpleXML コンポーネントは、XML データ パスに基づくクエリ メソッドを提供します。 XML データ パスは、XML のルートから特定のタグまで渡されるすべてのタグです。このパスでは、スラッシュ「/」を使用してタグ名を区切ります。たとえば、上記の XML データの場合、ルートから開始して部門、部門、従業員、および従業員タグを通過するすべてのタグ「name」の値をクエリする場合、パス
は「/Departs」になります。 /部門/従業員/従業員/名前 ". SimpleXML コンポーネントは xpath メソッドを使用してパスを解析します。その構文形式は次のとおりです。
xpath(string path)
path はパスです。このメソッドは、クエリ対象のすべてのタグ値を含む配列を返します。次のコードは、上記の XML データ内のすべての名前タグをクエリします。



コードをコピーします
コードは次のとおりです: $xml = simplexml_load_file('example.xml') //XML ファイルを読み取ります
$result = $xml->xpath ('/detache/employees/employee/name'); //ノードの定義
var_dump($result); //出力ノード


実行結果は以下の通りです。


コードをコピーします
コードは次のとおりです: array(3) { [0]=> object(SimpleXMLElement)#2 (1) {
[0]=> string(5) "サイモン"
}
[1]=> オブジェクト(SimpleXMLElement)#3 (1) {
[0]=> 文字列(6) "エレイン"
}
[2]=> オブジェクト(SimpleXMLElement)# 4 (1 ) {
[0]=> string(5) "Helen"
}
}


すべての名前タグがクエリされたことがわかります。
2.3 XMLデータの変更
XMLデータの変更は、XMLデータ内のタグを読み取る方法と同様です。つまり、SimpleXML オブジェクト内のタグの値を直接変更します。次のコードは、上記の XML データの最初の「Depart」タグの「name」サブタグの変更を実装します。



コードをコピーします
コードは次のとおりです: $xml = simplexml_load_file('example.xml') //XML を読み取ります
$xml->Depart->name[ 0] = "Human Resource"; // ノードを変更します
?>

変更後は XML ファイルには影響しません。ただし、プログラムでは、変更された値は SimpleXML オブジェクトの読み取りに使用されます。
2.4 XML データの標準化
SimpleXML は、XML データを XML として標準化する方法も提供します。 asXML メソッドは、XML 1.0 標準に従って SimpleXML オブジェクト内のコンテンツを効果的に再配置し、それを文字列データ型として返すことができます。次のコードは、上記の XML データの標準化を実装します。


コードをコピーします

コードは次のとおりです:

$xml = simplexml_load_file('example.xml'); //XML データを読み取る
echo $xml->asXML(); //XML データを標準化する

2.5 XML データstorage
SimpleXML オブジェクト内の XML データを XML ファイルに格納する方法は非常に簡単で、asXML メソッドの戻り結果をファイルに出力します。次のコードは、まず XML ファイル内の部門名を変更し、次に変更された XML データを別の XML ファイルに出力します。

コードをコピーします コードは次のとおりです:
$xml = simplexml_load_file('example.xml') //XMLデータを読み取ります
$newxml = $xml->asXML (); //XML データを標準化します
$fp = fopen("newxml.xml", "w"); //XML データを書き込むファイルを開きます
fwrite($fp, $newxml); //XML データを書き込みますfclose ($fp); // ファイルを閉じます


コードを実行すると、以下に示すように newxml.xml ファイルに XML データが表示されます。
XML ファイルへの変更が出力ファイルに保存されていることがわかります。
3 XML ドキュメントの動的作成
実際のアプリケーションでは、XML ドキュメントを動的に生成する必要がある場合があります。前に紹介した SimpleXML コンポーネントは、XML ドキュメントを作成するメソッドを提供しません。したがって、XML ドキュメントを動的に作成する必要がある場合は、DOM コンポーネントを使用して作成することがよくあります。 DOM は Document Object Model の略称で、DOM コンポーネントは XML ドキュメントのツリー解析モードを提供します。次のコードは、DOM コンポーネントを使用して XML ドキュメントを作成します。




コードをコピーします
コードは次のとおりです: //新しいDOMドキュメントを作成します
$dom = new DomDocument()
//ルートノードに部門タグを作成します。
$Departs = $dom->createElement('Departs');
$dom->appendChild($Departs);
//Department タグの下にDepartment サブタグを作成します
$Depart = $dom-> createElement('Depart') ;
$Departs->appendChild($Depart);
//deployees タグの下にemployees サブタグを作成します
$employees = $dom->createElement('employees'); >appendChild($employees );
//employees タグの下に従業員のサブタグを作成します
$employee = $dom->createElement('employee');
$employees->appendChild($employee);従業員タグの下に Serial_no を作成します 子タグ
$serial_no = $dom->createElement('serial_no');
$employee->appendChild($serial_no);
//serial_no タグに値ノード 100001 を追加します
$serial_no_value = $dom->createTextNode ('100001');
$serial_no->appendChild($serial_no_value);
echo $dom->saveXML()?>
出力結果は次のようになります。次のように。

<退職>
<従業員> 100001




XML ドキュメントを動的に作成するだけでなく、DOM コンポーネントを使用して XML ファイルを読み取ることもできます。次のコードは、上記の XML ファイルの読み取りを実装します。



コードをコピー

コードは次のとおりです:


$dom = new DomDocument(); //DOMオブジェクトを作成します
$dom->load('example.xml'); //XML ファイルを取得します
$root = $dom->documentElement; //XML データのルートを取得します
read_child($root) //read_child 関数を呼び出してルート オブジェクトを読み取ります
function read_child($); node)
{ $children = $node->childNodes; // $node のすべての子ノードを取得しますforeach($children as $e) // 各子ノードを読み取るループ{ if($e-> ;nodeType == XML_TEXT_NODE) / /子ノードがテキスト型の場合、出力
{
echo $e->nodeValue.”

}
else if($e->nodeType = = XML_ELEMENT_NODE) //子ノードがノードオブジェクトの場合、関数処理を呼び出します
{
read_child($e)
}
}
?> 実行結果は以下の通りです。



コードをコピー

コードは次のとおりです:


見積もり
制作サポート
100001
Simon
24
1982-11-06
5000.00
1000.00
100 002
エレイン
24 1982-01-01 6000.00 2000.00 テストセンター
110001
ヘレン
23
1983-07-21
5000.00
1000.00


上記の例では、再帰的な方法でXMLデータを処理し、XMLデータ内の全てのテキストタグを出力する機能を実現しています。
4 XML アプリケーション例 - ゲストブック
XML の基本的な操作については以前に紹介しましたが、このセクションでは XML ゲストブックの設計を例として、実際のアプリケーションで PHP と XML データの対話型操作を実現する方法を詳しく説明します。
4.1 XML ファイル構造の設計
XML ファイルは、ゲストブック内のメッセージである XML データを保存するために使用されます。ここで、XML データには、メッセージごとに、主にメッセージのタイトル、メッセージの作成者名、メッセージの内容の 3 つの内容が含まれます。したがって、XML ファイルの形式は次のように設計されています。

コードをコピーします コードは次のとおりです:

メッセージの</タイトル> <br><著者>コメント者</コンテンツ></コンテンツ> <br><br>; <br>4.2 投稿ページの書き方<br> メッセージ投稿ページは2ページで構成されています。 1 つは訪問者がメッセージを作成できるフォームの HTML ファイルで、もう 1 つは訪問者の入力を処理するために使用される PHP スクリプトです。フォームの HTML コードを以下に示します。 <br><br><br>コードをコピーします</div> <br> コードは次のとおりです:<br><br> <div class="codetitle"><head> <span style="CURSOR: pointer" onclick="doCopy('code32788')"><title>新しいメッセージを投稿

; /H1>

<フォーム名=”form1” メソッド=”post” アクション=”Post.php”>
title
著者
コンテンツ




;/html>


ユーザー入力の処理に使用される PHP スクリプトの基本ロジックは、まず DOM オブジェクトを作成し、次に XML ファイル内の XML データを読み取り、次に XML オブジェクト上に新しいノードを作成してユーザーのデータを保存することです。 XML データを入力し、最後に元の XML ファイルに出力します。具体的な実装コードは以下の通りです。



コードをコピーします

コードは次のとおりです:


$guestbook = new DomDocument() //新しいDOMオブジェクトを作成します
$guestbook->load('DB/guestbook .xml' ); //XML データを読み取る
$threads = $guestbook->documentElement; //XML 構造のルートを取得する
//新しいスレッド ノードを作成する
$thread = $guestbook->createElement(' thread');
$threads->appendChild($thread);
//新しいスレッドノードにタイトルタグを作成します
$title = $guestbook->createElement('title'); appendChild($guestbook ->createTextNode($_POST['title']));
$thread->appendChild($title);
//新しいスレッド ノードに作成者タグを作成します

$author = $guestbook- >createElement( 'author');
$author->appendChild($guestbook->createTextNode($_POST['author']));
$thread->appendChild($author);新しいスレッド ノード
$content = $guestbook->createElement('content'); $content->appendChild($guestbook->createTextNode($_POST['content'])); にコンテンツ タグを作成します。 $thread-> ;appendChild($content); //XML データをファイルに書き込みます$fp = fopen("DB/guestbook.xml", "w"); >saveXML( ))) echo "メッセージが送信されました";
else
echo "メッセージが送信されました"

;
図 2 に示すように、ブラウザーで上記の HTML ファイルを実行し、適切なメッセージの内容を入力します。
'700')this. style="max-width:90%";" border="0">
図2 新しいメッセージインターフェイス
押した後[送信]をクリックボタンをクリックすると、XML ファイルの内容は次のようになります。
4.3 表示ページの作成
表示ページは、先ほど紹介した SimpleXML コンポーネントを使用して簡単に実装できます。具体的な実装コード 以下に示すように

コードをコピーします コードは次のとおりです:
//メッセージを保存するために使用される XML ファイルを開きます
$guestbook = simplexml_load_file('DB/guestbook .xml');
foreach ($guestbook->thread as $th) //XML データ内の各スレッドタグを読み取るループ
{
echo "Title:".$th ->タイトル."
”;
echo “著者: ”.$th->author.”
”;
echo “内容: ”.$th->content.””;
echo “




図 3 に示すようにブラウザーで
'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" border=0>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/322160.html技術記事 XML は、データベースのような形式でデータを保存する、一般的な半構造化ファイル形式です。実際のアプリケーションでは、単純でセキュリティの低いデータには XML ファイルがよく使用されます...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート