ホームページ  >  記事  >  バックエンド開発  >  PHP操作の詳しい説明 xml_PHPチュートリアル

PHP操作の詳しい説明 xml_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-15 13:21:471083ブラウズ

XML は、データベースのような形式でデータを保存する、一般的な半構造化ファイル形式です。実際のアプリケーションでは、単純でセキュリティの低いデータが XML ファイル形式で保存されることがよくあります。この利点は、データベースとの対話操作を減らして読み取り効率を向上できる一方で、XML の利点を有効に活用してプログラム作成の難易度を軽減できることです。​

PHP は XML ファイルを読み取るための完全なメソッド セットを提供し、XML ベースのスクリプトを簡単に作成できるようにします。この章では、PHP と XML の操作方法を紹介し、一般的に使用されるいくつかの XML クラス ライブラリについて簡単に説明します。
1 XML の概要
XMLとは「eXtensible Markup Language」の略で、HTMLと似たマークアップ言語です。ただし、HTML とは異なり、XML は主にデータの記述とデータの保存に使用され、HTML は主にデータの表示に使用されます。
XML は、開発者がニーズに応じてタグ名を作成できるようにする「メタタグ」言語です。たとえば、次の XML コードを使用してメッセージを記述することができます。
コードをコピーします。コードは次のとおりです:
<スレッド>
ようこそ
<著者>サイモン
XML ゲストブックへようこそ!!
その中で、 タグと タグはこれをメッセージとしてマークします。メッセージにはタイトル、作成者、内容があり、メッセージメッセージを完全に表現します。
XML ファイルの先頭にある は通常、XML データの先頭を識別するために使用され、XML データは標準のバージョン情報を使用します。ブラウザーで XML ファイルにアクセスすると、図 1 に示すように、明確に階層化された XML データ情報を確認できます。
XML は近年、非常に急速に発展しており、多くのソフトウェア開発者がアプリケーション開発に XML 開発標準を採用し始めています。さらに、多くの新興テクノロジーは XML データに基づいて構築されています。これは、XML が HTML と同様に Web テクノロジーの不可欠な部分になることを意味します。
2 単純な XML 操作
実際のアプリケーションでは、PHP と XML 間の対話が広く使用されています。 SimpleXML コンポーネントは、PHP5 への新しいシンプルな追加です
シンプルな XML 操作コンポーネント。従来の XML コンポーネントと比較して、SimpleXML コンポーネントの使用は非常に簡単です。このセクションでは
を使用します
SimpleXMLコンポーネントのXML操作方法を詳しく紹介します。
2.1 SimpleXMLオブジェクトを作成する
SimpleXML オブジェクトは、XML データを一時的に保存するために使用される一時変数です。 XML に対する操作は、SimpleXML オブジェクトを操作することで完了します。 SimpleXML コンポーネントには、SimpleXML オブジェクトを作成するための 2 つのメソッドが用意されています。 1 つ目の方法は、simplexml_load_string 関数を使用して文字列変数内の XML データを読み取り、作成を完了する方法です。構文形式は次のとおりです。
simplexml_load_string(文字列データ)
ここでのデータ変数は、XML データを保存するために使用されます。次のコードは、simplexml_load_string 関数を使用して SimpleXML オブジェクトを作成します
コードをコピーします。コードは次のとおりです:
$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 データが格納されています。 simplexml_load_string 関数は、変数 $data を SimpleXML オブジェクトに変換します。オブジェクトの構造は print_r 関数の出力から確認できます。実行結果は次のとおりです。
コードをコピーします。コードは次のとおりです:
SimpleXMLElement オブジェクト
(
[出発] => 配列
(
[0] => SimpleXMLElement オブジェクト
(
[名前] => 制作サポート
[従業員] => SimpleXMLElement オブジェクト
( [従業員] => 配列 (
[0] => SimpleXMLElement オブジェクト
( [シリアル番号] => 100001
[名前] => サイモン
[年齢] => 24
[誕生日] => 1982-11-06
[給与] => 5000.00
[ボーナス] => 1000.00
)
[1] => SimpleXMLElement オブジェクト
( [シリアル番号] => 100002
[名前] => エレイン
[年齢] => 24
[誕生日] => 1982-01-01
[給与] => 6000.00
[ボーナス] => 2000.00
)
)
)
)
[1] => SimpleXMLElement オブジェクト
(
[名前] => テストセンター
[従業員] => SimpleXMLElement オブジェクト
(
[従業員] => SimpleXMLElement オブジェクト
(
[シリアル番号] => 110001
[名前] => ヘレン
[年齢] => 23
[誕生日] => 1983-07-21
[給与] => 5000.00
[ボーナス] => 1000.00
)
)
)
)
)
出力結果から分かるように、SimpleXMLオブジェクトの構造はXMLデータの形式と全く同じです。
2 番目の方法は、simplexml_load_flie 関数を使用して XML ファイルを読み込み、作成を完了する方法です。構文形式は次のとおりです。
simplexml_load_file(文字列ファイル名)
ここでの filename 変数は、XML データ ファイルを保存するために使用されるファイル名とパスです。次のコードは、simplexml_load_file 関数を使用して 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 関数はオブジェクトの詳細を表示します
var_dump 関数は、SimpleXML オブジェクトの詳細情報を表示するために使用できます。 print_r 関数と比較して、var_dump 関数の構文は次のとおりです。
void var_dump(object1, object2 … )
次のコードは、var_dump 関数を使用して、上記の例のオブジェクトの詳細情報を出力します。
コードをコピーします。コードは次のとおりです:
;
実行結果は以下の通りです。
コードをコピーします。コードは次のとおりです:
object(SimpleXMLElement)#1 (1) { ["出発"]=>配列(2) {
[0]=> 
オブジェクト(SimpleXMLElement)#2 (2) {
["名前"]=> 
string(18) 「制作サポート」
["従業員"]=> 
オブジェクト(SimpleXMLElement)#4 (1) {
["従業員"]=> 
配列(2) {
[0]=> 
オブジェクト(SimpleXMLElement)#5 (6) {
["シリアル番号"]=> 
文字列(6)「100001」
["名前"]=> 
文字列(5)「サイモン」
["年齢"]=> 
文字列(2)「24」
["誕生日"]=> 
文字列(10)「1982-11-06」
["給与"]=> 
文字列(7)「5000.00」
["ボーナス"]=> 
文字列(7)「1000.00」
}
[1]=> 
オブジェクト(SimpleXMLElement)#6 (6) {
["シリアル番号"]=> 
文字列(6)「100002」
["名前"]=> 
文字列(6)「エレイン」
["年齢"]=> 
文字列(2)「24」
["誕生日"]=> 
文字列(10)「1982-01-01」
["給与"]=> 
文字列(7)「6000.00」
["ボーナス"]=> 
文字列(7)「2000.00」
}
}
}
}
[1]=> 
オブジェクト(SimpleXMLElement)#3 (2) {
["名前"]=> 
文字列(14) 「テストセンター」
["従業員"]=> 
オブジェクト(SimpleXMLElement)#7 (1) {
["従業員"]=> 
オブジェクト(SimpleXMLElement)#8 (6) {
["シリアル番号"]=> 
文字列(6)「110001」
["名前"]=> 
文字列(5) 「ヘレン」
["年齢"]=> 
文字列(2)「23」
["誕生日"]=> 
文字列(10)「1983-07-21」
["給与"]=> 
文字列(7)「5000.00」
["ボーナス"]=> 
文字列(7)「1000.00」
}}}}}
前述の print_r の出力結果と比較して、var_dump 関数の出力結果の構造はより複雑で、オブジェクト内の各プロパティのデータ型が分析されます。オブジェクト探索。
XML データ内の抽出
2. 例えば、上のXMLデータ内の各「depart」の下にある「name」属性を取得する必要がある場合、foreach関数を使用することによって、XMLを取得することもできる。完了しました、次の代コード
に示されています。
复制代码代码如下:
$a として出発)
{
echo “$a->name
”; 
}
?> 
実行結果は次のようになります。
制作サポート
テストセンター
//读取 XML 文件 //循環读取 XML データ内のすべての出発标签
//その中の名前プロパティ
また、XML データ内で指定されたマークを直接取得するために、角括弧「[]」を使用することもできます。
复制代码代码如下:
$xml = simplexml_load_file('example.xml'); //XML 文書を读取
echo $xml->Department->name[0]; //输出节点
?> 
実行結果は次のようになります。
制作サポート
たとえば、SimpleXML アセンブリは、1 つの子ポリシーの次のすべての子ポリシーを取得するための子メソッドを提供します。ペイコードは、最初の「出発​​」マークの下の子マークの取得を実現します。
复制代码如下:
$xml = simplexml_load_file('example.xml');
foreach ($xml->Depart->children() as $Depart) // ループして、Depart タグの下のサブタグを読み取ります
{
var_dump($Depart); //タグのXMLデータを出力します
}
?>
実行結果は以下の通りです。
コードをコピーします。コードは次のとおりです:
オブジェクト(SimpleXMLElement)#3 (1) {
[0]=>
string(18) 「制作サポート」
}
オブジェクト(SimpleXMLElement)#5 (1) {
["従業員"]=>
配列(2) {
[0]=>
オブジェクト(SimpleXMLElement)#3 (6) {
["シリアル番号"]=>
文字列(6)「100001」
["名前"]=>
文字列(5)「サイモン」
["年齢"]=>
文字列(2)「24」
["誕生日"]=>
文字列(10)「1982-11-06」
["給与"]=>
文字列(7)「5000.00」
["ボーナス"]=>
文字列(7) "1000.00"
}
[1]=>
オブジェクト(SimpleXMLElement)#6 (6) {
["シリアル番号"]=>
文字列(6)「100002」
["名前"]=>
文字列(6)「エレイン」
["年齢"]=>
文字列(2)「24」
["誕生日"]=>
文字列(10)「1982-01-01」
["給与"]=>
文字列(7)「6000.00」
["ボーナス"]=>
文字列(7) "2000.00"
}
}
}
children メソッドを使用した後、すべての子タグが新しい XML ファイルとして扱われることがわかります。
3. XML データパスに基づいたクエリ
SimpleXML コンポーネントは、XML データ パスに基づいたクエリ メソッドを提供します。 XML データ パスは、XML のルートから特定のタグまで渡されるすべてのタグです。このパスでは、スラッシュ「/」を使用してタグ名を区切ります。たとえば、上記の XML データの場合、ルートから出発して、出発、部門、従業員、従業員タグを通過するすべてのタグ「name」の値をクエリする場合、パスは
になります。
は「/部署/部署/従業員/従業員/名前」です。 SimpleXML コンポーネントは xpath メソッドを使用してパスを解析します。その構文形式は次のとおりです。
xpath(文字列パス)
道は道です。このメソッドは、クエリ対象のすべてのタグ値を含む配列を返します。次のコードは、上記の XML データ内のすべての名前タグをクエリします。
コードをコピーします。コードは次のとおりです:
$xml = simplexml_load_file('example.xml') //XML ファイルを読み込みます
$result = $xml->xpath('/Departs/Depart/employees/employee/name') //ノードを定義します
var_dump($result); //出力ノード
?>
実行結果は以下の通りです。
コードをコピーします。コードは次のとおりです:
配列(3) {
[0]=> オブジェクト(SimpleXMLElement)#2 (1) {
[0]=> 文字列(5) 「サイモン」
}
[1]=> オブジェクト(SimpleXMLElement)#3 (1) {
[0]=> 文字列(6) 「エレイン」
}
[2]=> オブジェクト(SimpleXMLElement)#4 (1) {
[0]=> 文字列(5) 「ヘレン」
}
}
すべての名前タグがクエリされたことがわかります。
2.3 XMLデータの変更
XML データの変更は、XML データ内のタグを読み取る方法と似ています。つまり、SimpleXML オブジェクト内のタグの値を直接変更します。次のコードは、上記の XML データの最初の「Depart」タグの「name」サブタグの変更を実装します。
コードをコピーします。コードは次のとおりです:
$xml = simplexml_load_file('example.xml') //XML を読み取る
$xml->Department->name[0] = “人事” //ノードを変更します
?>
変更後は、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データの保存
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 = 新しい DomDocument();
//ルートノードで出発ラベルを作成します
$Departs = $dom->createElement('Departs');
$dom->appendChild($Departs);
//出発タグの下に出発サブタグを作成します
$Depart = $dom->createElement('Depart');
$デパート->appendChild($デパート);
//出発タグの下に従業員のサブタグを作成します
$従業員 = $dom->createElement('従業員');
$Depart->appendChild($employees);
//従業員タグの下に従業員サブタグを作成します
$従業員 = $dom->createElement('従業員');
$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);
//XMLデータを出力する
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 関数を呼び出してルート オブジェクトを読み取ります
関数 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
サイモン
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データ内の全てのテキストタグを出力する機能を実現しています。
4 つの XML アプリケーション例 - ゲストブック
XML の基本操作については以前に紹介しましたが、このセクションでは XML ゲストブックの設計を例として、実際のアプリケーションで PHP と XML データの対話型操作を実現する方法を詳しく説明します。
4.1 XMLファイル構造の設計
XML ファイルは、ゲストブック内のメッセージである XML データを保存するために使用されます。ここで、XML データには、メッセージごとに、主にメッセージのタイトル、メッセージの作成者名、メッセージの内容の 3 つの内容が含まれます。したがって、XML ファイルの形式は次のように設計されています。
コードをコピーします。コードは次のとおりです:
<スレッド>
メッセージのタイトルです
コメント投稿者
メッセージの内容は次のとおりです
4.2 投稿ページの作成
メッセージ投稿ページは2つのページで構成されています。 1 つは訪問者がメッセージを作成できるフォームの HTML ファイルで、もう 1 つは訪問者の入力を処理するために使用される PHP スクリプトです。フォームの HTML コードを以下に示します。
コードをコピーします。コードは次のとおりです:
新しいコメントを投稿

新しいメッセージを投稿

<フォーム名=”form1″ メソッド=”ポスト” アクション=”Post.php”>
<テーブル幅=”500″ border=”0″ align=”center” cellpadding=”0″ cellpacing=”0″>
タイトル
著者
コンテンツ

<入力タイプ=”送信” 値=”送信”>
<入力タイプ=”リセット” 値=”リセット”>

ユーザー入力の処理に使用される 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');
$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");
if(fwrite($fp, $guestbook->saveXML()))
エコー「メッセージは正常に送信されました」
;
その他
エコー「メッセージの送信に失敗しました」
fclose($fp);
?>
図 2 に示すように、ブラウザーで上記の HTML ファイルを実行し、適切なメッセージの内容を入力します。
図 2 新しいメッセージ投稿インターフェイス
[送信]ボタンをクリックした後のXMLファイルの内容は以下の通りです。
メッセージがXMLファイルに保存されていることがわかります。
4.3 表示ページの作成
表示ページは先ほど紹介したSimpleXMLコンポーネントを利用して簡単に実装できます。 具体的な実装コードは以下の通りです。
コードをコピーします。コードは次のとおりです:
//メッセージの保存に使用される XML ファイルを開きます
$guestbook = simplexml_load_file('DB/guestbook.xml');
foreach($guestbook->thread as $th) //XML データ内の各スレッド タグを読み取るループ
{
echo “タイトル:”.$th->title.”
”;
echo “著者:”.$th->author.”
”;
echo “コンテンツ:
”.$th->content.”
”;

」をエコーし​​ます
}
?>
図 3 に示すように、ブラウザで実行結果を表示します。
興味があるかもしれない記事:
XML値を読み取るためのPHPコード(推奨)
phpはXMLサンプルコードを読み取ります
PHP で XML を読み書きするいくつかの方法
PHP で XML ファイルを生成する 4 つの方法を共有します
PHPでXML DOMを読み書きするための実装コード
PHP で simplexml_load_string 関数を使用する手順
php XML 入門教材
PHPはXMLをデータベースクラスとして操作します
phpはXMLの簡単なサンプルコードを生成します
PHP と XML、XSLT、Mysql を組み合わせてコードを実装するアプリケーション
文字化けの究極の解決策として、PHPで生成されたXMLをFLASHで取得します
PHPのXML読み込みメソッドの紹介
詳細なソース参照: http://www.jb51.net/article/23912.htmXML は、データベースのような形式でデータを保存する、一般的な半構造化ファイル形式です。実際のアプリケーションでは、単純でセキュリティの低いデータが XML ファイル形式で保存されることがよくあります。この利点は、データベースとの対話操作を減らして読み取り効率を向上できる一方で、XML の利点を有効に活用してプログラム作成の難易度を軽減できることです。
PHP は XML ファイルを読み取るための完全なメソッド セットを提供し、XML ベースのスクリプトを簡単に作成できるようにします。この章では、PHP と XML の操作方法を紹介し、一般的に使用されるいくつかの XML クラス ライブラリについて簡単に説明します。
1 XML の概要
XML是“可扩展性标识语言(eXtensible Markup Language)”的缩写,是一种类似于 HTML的标记性语言。但是与 HTML不同,XML主要用于描述数据和存放数据,而 HTML主要用于显示数据。 
XML是一种“元标记”语言,开发者可以根据自己的需要创建标记的名称。例如,下面的 XML代码可以用来描述一条留言。 
 
 
复制代码 代码如下:
 
Welcome 
Simon 
Welcome to XML guestbook!! 
 
 
其中,标签标记了这是一段留言。在留言中有标题、作者、内容,完整的表述了一条留言信息。 
在一个 XML文件的顶部,通常使用来标识 XML数据的开始和 XML数据使用标准的版本信息。在浏览器中访问 XML文件可以看到层次分明的 XML数据信息,如图 1所示。 
 
XML的发展非常迅速,近些年来很多软件开发商都开始采用 XML的开发标准进行应用程序的开发。并且,很多新兴技术都架构在 XML数据之上。这意味着 XML将与 HTML一样成为 Web技术不可或缺的一部分。 
2 简单的 XML操作 
在实际应用中,PHP与 XML的交互操作应用非常广泛。SimpleXML组件是 PHP5新增加的一个简 
单的 XML操作组件,与传统的 XML组件相比,SimpleXML组件的使用非常简单。本节将对使用 
SimpleXML组件操作 XML的方法做一下详细介绍。 
2.1 创建一个 SimpleXML对象 
SimpleXML对象是用来临时存储 XML数据的临时变量,对 XML进行的操作都是通过操作 SimpleXML对象来完成的。SimpleXML组件提供了两种创建 SimpleXML对象的方法。第一种方法是使用 simplexml_load_string函数读取一个字符串型变量中的 XML数据来完成创建的,其语法格式如下所示。 
simplexml_load_string(string data) 
这里的 data变量用于存储 XML数据。以下代码使用 simplexml_load_string函数创建了一个 SimpleXML对象 
复制代码 代码如下:
$data = <<
 
 
 
production support 
 
 
100001 
Simon 
24 
1982-11-06 
5000.00 
1000.00 
 
 
100002 
Elaine 
24 
1982-01-01 
6000.00 
2000.00 
 
 
 
 
testing center 
 
 
110001 
<名前>ヘレン
23年齢>
1983-07-21誕生日>
5000.00給与>
<ボーナス>1000.00
XML;
$xml = simplexml_load_string($data) //SimpleXML オブジェクトを作成します
print_r($xml); // XML を出力します
?>
上記の例では、$data 変数に XML データが格納されています。 simplexml_load_string 関数は、変数 $data を SimpleXML オブジェクトに変換します。オブジェクトの構造は print_r 関数の出力から確認できます。実行結果は次のとおりです。
コードをコピーします。コードは次のとおりです:
SimpleXMLElement オブジェクト
(
[出発] => 配列
(
[0] => SimpleXMLElement オブジェクト
(
[名前] => 制作サポート
[従業員] => SimpleXMLElement オブジェクト
( [従業員] => 配列 (
[0] => SimpleXMLElement オブジェクト
( [シリアル番号] => 100001
[名前] => サイモン
[年齢] => 24
[誕生日] => 1982-11-06
[給与] => 5000.00
[ボーナス] => 1000.00
)
[1] => SimpleXMLElement オブジェクト
( [シリアル番号] => 100002
[名前] => エレイン
[年齢] => 24
[誕生日] => 1982-01-01
[給与] => 6000.00
[ボーナス] => 2000.00
)
)
)
)
[1] => SimpleXMLElement オブジェクト
(
[名前] => テストセンター
[従業員] => SimpleXMLElement オブジェクト
(
[従業員] => SimpleXMLElement オブジェクト
(
[シリアル番号] => 110001
[名前] => ヘレン
[年齢] => 23
[誕生日] => 1983-07-21
[給与] => 5000.00
[ボーナス] => 1000.00
)
)
)
)
)
出力結果から分かるように、SimpleXMLオブジェクトの構造はXMLデータの形式と全く同じです。
2 番目の方法は、simplexml_load_flie 関数を使用して XML ファイルを読み込み、作成を完了する方法です。構文形式は次のとおりです。
simplexml_load_file(文字列ファイル名)
ここでの filename 変数は、XML データ ファイルを保存するために使用されるファイル名とパスです。次のコードは、simplexml_load_file 関数を使用して 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 関数はオブジェクトの詳細を表示します
var_dump 関数は、SimpleXML オブジェクトの詳細情報を表示するために使用できます。 print_r 関数と比較して、var_dump 関数の構文は次のとおりです。
void var_dump(object1, object2 … )
次のコードは、var_dump 関数を使用して、上記の例のオブジェクトの詳細情報を出力します。
コードをコピーします。コードは次のとおりです:
;
実行結果は以下の通りです。
コードをコピーします。コードは次のとおりです:
object(SimpleXMLElement)#1 (1) { ["出発"]=>配列(2) {
[0]=> 
オブジェクト(SimpleXMLElement)#2 (2) {
["名前"]=> 
string(18) 「制作サポート」
["従業員"]=> 
オブジェクト(SimpleXMLElement)#4 (1) {
["従業員"]=> 
配列(2) {
[0]=> 
オブジェクト(SimpleXMLElement)#5 (6) {
["シリアル番号"]=> 
文字列(6)「100001」
["名前"]=> 
文字列(5)「サイモン」
["年齢"]=> 
文字列(2)「24」
["誕生日"]=> 
文字列(10)「1982-11-06」
["給与"]=> 
文字列(7)「5000.00」
["ボーナス"]=> 
文字列(7)「1000.00」
}
[1]=> 
オブジェクト(SimpleXMLElement)#6 (6) {
["シリアル番号"]=> 
文字列(6)「100002」
["名前"]=> 
文字列(6)「エレイン」
["年齢"]=> 
文字列(2)「24」
["誕生日"]=> 
文字列(10)「1982-01-01」
["給与"]=> 
文字列(7)「6000.00」
["ボーナス"]=> 
文字列(7)「2000.00」
}
}
}
}
[1]=> 
オブジェクト(SimpleXMLElement)#3 (2) {
["名前"]=> 
文字列(14) 「テストセンター」
["従業員"]=> 
オブジェクト(SimpleXMLElement)#7 (1) {
["従業員"]=> 
オブジェクト(SimpleXMLElement)#8 (6) {
["シリアル番号"]=> 
文字列(6)「110001」
["名前"]=> 
文字列(5) 「ヘレン」
["年齢"]=> 
文字列(2)「23」
["誕生日"]=> 
文字列(10)「1983-07-21」
["給与"]=> 
文字列(7)「5000.00」
["ボーナス"]=> 
文字列(7)「1000.00」
}}}}}
前述の print_r の出力結果と比較して、var_dump 関数の出力結果の構造はより複雑で、オブジェクト内の各プロパティのデータ型が分析されます。オブジェクト探索。
XML データ内の抽出
2. 例えば、上のXMLデータ内の各「depart」の下にある「name」属性を取得する必要がある場合、foreach関数を使用することによって、XMLを取得することもできる。完了しました、次の代コード
に示されています。
复制代码代码如下:
$a として出発)
{
echo “$a->name
”; 
}
?> 
実行結果は次のようになります。
制作サポート
テストセンター
//读取 XML 文件 //循環读取 XML データ内のすべての出発标签
//その中の名前プロパティ
また、XML データ内で指定されたマークを直接取得するために、角括弧「[]」を使用することもできます。
复制代码代码如下:
$xml = simplexml_load_file('example.xml'); //XML 文書を读取
echo $xml->Department->name[0]; //输出节点
?> 
実行結果は次のようになります。
制作サポート
たとえば、SimpleXML アセンブリは、1 つの子ポリシーの次のすべての子ポリシーを取得するための子メソッドを提供します。ペイコードは、最初の「出発​​」マークの下の子マークの取得を実現します。
复制代码如下:
$xml = simplexml_load_file('example.xml');
foreach ($xml->Depart->children() as $Depart) // ループして、Depart タグの下のサブタグを読み取ります
{
var_dump($Depart); //タグのXMLデータを出力します
}
?>
実行結果は以下の通りです。
コードをコピーします。コードは次のとおりです:
オブジェクト(SimpleXMLElement)#3 (1) {
[0]=>
string(18) 「制作サポート」
}
オブジェクト(SimpleXMLElement)#5 (1) {
["従業員"]=>
配列(2) {
[0]=>
オブジェクト(SimpleXMLElement)#3 (6) {
["シリアル番号"]=>
文字列(6)「100001」
["名前"]=>
文字列(5)「サイモン」
["年齢"]=>
文字列(2)「24」
["誕生日"]=>
文字列(10)「1982-11-06」
["給与"]=>
文字列(7)「5000.00」
["ボーナス"]=>
文字列(7) "1000.00"
}
[1]=>
オブジェクト(SimpleXMLElement)#6 (6) {
["シリアル番号"]=>
文字列(6)「100002」
["名前"]=>
文字列(6)「エレイン」
["年齢"]=>
文字列(2)「24」
["誕生日"]=>
文字列(10)「1982-01-01」
["給与"]=>
文字列(7)「6000.00」
["ボーナス"]=>
文字列(7) "2000.00"
}
}
}
children メソッドを使用した後、すべての子タグが新しい XML ファイルとして扱われることがわかります。
3. XML データパスに基づいたクエリ
SimpleXML コンポーネントは、XML データ パスに基づいたクエリ メソッドを提供します。 XML データ パスは、XML のルートから特定のタグまで渡されるすべてのタグです。このパスでは、スラッシュ「/」を使用してタグ名を区切ります。たとえば、上記の XML データの場合、ルートから出発して、出発、部門、従業員、従業員タグを通過するすべてのタグ「name」の値をクエリする場合、パスは
になります。
は「/部署/部署/従業員/従業員/名前」です。 SimpleXML コンポーネントは xpath メソッドを使用してパスを解析します。その構文形式は次のとおりです。
xpath(文字列パス)
道は道です。このメソッドは、クエリ対象のすべてのタグ値を含む配列を返します。次のコードは、上記の XML データ内のすべての名前タグをクエリします。
コードをコピーします。コードは次のとおりです:
$xml = simplexml_load_file('example.xml') //XML ファイルを読み込みます
$result = $xml->xpath('/Departs/Depart/employees/employee/name') //ノードを定義します
var_dump($result); //出力ノード
?>
実行結果は以下の通りです。
コードをコピーします。コードは次のとおりです:
配列(3) {
[0]=> オブジェクト(SimpleXMLElement)#2 (1) {
[0]=> 文字列(5) 「サイモン」
}
[1]=> オブジェクト(SimpleXMLElement)#3 (1) {
[0]=> 文字列(6) 「エレイン」
}
[2]=> オブジェクト(SimpleXMLElement)#4 (1) {
[0]=> 文字列(5) 「ヘレン」
}
}
すべての名前タグがクエリされたことがわかります。
2.3 XMLデータの変更
XML データの変更は、XML データ内のタグを読み取る方法と似ています。つまり、SimpleXML オブジェクト内のタグの値を直接変更します。次のコードは、上記の XML データの最初の「Depart」タグの「name」サブタグの変更を実装します。
コードをコピーします。コードは次のとおりです:
$xml = simplexml_load_file('example.xml') //XML を読み取る
$xml->Department->name[0] = “人事” //ノードを変更します
?>
変更後は、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データの保存
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 = 新しい DomDocument();
//ルートノードで出発ラベルを作成します
$Departs = $dom->createElement('Departs');
$dom->appendChild($Departs);
//出発タグの下に出発サブタグを作成します
$Depart = $dom->createElement('Depart');
$デパート->appendChild($デパート);
//出発タグの下に従業員のサブタグを作成します
$従業員 = $dom->createElement('従業員');
$Depart->appendChild($employees);
//従業員タグの下に従業員サブタグを作成します
$従業員 = $dom->createElement('従業員');
$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);
//XMLデータを出力する
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 関数を呼び出してルート オブジェクトを読み取ります
関数 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
サイモン
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データ内の全てのテキストタグを出力する機能を実現しています。
4 つの XML アプリケーション例 - ゲストブック
XML の基本操作については以前に紹介しましたが、このセクションでは XML ゲストブックの設計を例として、実際のアプリケーションで PHP と XML データの対話型操作を実現する方法を詳しく説明します。
4.1 XMLファイル構造の設計
XML ファイルは、ゲストブック内のメッセージである XML データを保存するために使用されます。ここで、XML データには、メッセージごとに、主にメッセージのタイトル、メッセージの作成者名、メッセージの内容の 3 つの内容が含まれます。したがって、XML ファイルの形式は次のように設計されています。
コードをコピーします。コードは次のとおりです:
<スレッド>
メッセージのタイトルです
コメント投稿者
メッセージの内容は次のとおりです
4.2 投稿ページの作成
メッセージ投稿ページは2つのページで構成されています。 1 つは訪問者がメッセージを作成できるフォームの HTML ファイルで、もう 1 つは訪問者の入力を処理するために使用される PHP スクリプトです。フォームの HTML コードを以下に示します。
コードをコピーします。コードは次のとおりです:
新しいコメントを投稿

新しいメッセージを投稿

<フォーム名=”form1″ メソッド=”ポスト” アクション=”Post.php”>
<テーブル幅=”500″ border=”0″ align=”center” cellpadding=”0″ cellpacing=”0″>
タイトル
著者
コンテンツ

<入力タイプ=”送信” 値=”送信”>
<入力タイプ=”リセット” 値=”リセット”>

对于用来处理用户输入的 PHP脚本,其基本逻辑是首先创建一个 DOM对象,然后读取 XML文件中的 XML数据,接下来在 XML对象上创建新的节点并将用户的输入储存起来,最后将 XML数据输出到原来的 XML文件中。具体实现代码如下所示。 
复制代码 代码如下:
$guestbook = new DomDocument(); //创建一个新的 DOM对象
$guestbook->load('DB/guestbook.xml'); //读取 XML数据 
$threads = $guestbook->documentElement; //获得 XML结构的根 
//创建一个新 thread节点 
$thread = $guestbook->createElement('thread'); 
$threads->appendChild($thread); 
//在新的 thread节点上创建 title标签 
$title = $guestbook->createElement('title');
$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");
if(fwrite($fp, $guestbook->saveXML()))
エコー「メッセージは正常に送信されました」
;
その他
エコー「メッセージの送信に失敗しました」
fclose($fp);
?>
図 2 に示すように、ブラウザーで上記の HTML ファイルを実行し、適切なメッセージの内容を入力します。
図 2 新しいメッセージ投稿インターフェイス
[送信]ボタンをクリックした後のXMLファイルの内容は以下の通りです。
メッセージがXMLファイルに保存されていることがわかります。
4.3 表示ページの作成
表示ページは先ほど紹介したSimpleXMLコンポーネントを利用して簡単に実装できます。 具体的な実装コードは以下の通りです。
コードをコピーします。コードは次のとおりです:
//メッセージの保存に使用される XML ファイルを開きます
$guestbook = simplexml_load_file('DB/guestbook.xml');
foreach($guestbook->thread as $th) //XML データ内の各スレッド タグを読み取るループ
{
echo “タイトル:”.$th->title.”
”;
echo “著者:”.$th->author.”
”;
echo “コンテンツ:
”.$th->content.”
”;

」をエコーし​​ます
}
?>
図 3 に示すように、ブラウザで実行結果を表示します。
興味があるかもしれない記事:
XML値を読み取るためのPHPコード(推奨)
phpはXMLサンプルコードを読み取ります
PHP で XML を読み書きするいくつかの方法
PHP で XML ファイルを生成する 4 つの方法を共有します
PHPでXML DOMを読み書きするための実装コード
PHP で simplexml_load_string 関数を使用する手順
php XML 入門教材
PHPはXMLをデータベースクラスとして操作します
phpはXMLの簡単なサンプルコードを生成します
PHP と XML、XSLT、Mysql を組み合わせてコードを実装するアプリケーション
FLASHを使用してPHPで生成されたXMLを取得することが文字化けの究極の解決策です
PHPのXML読み込みメソッドの紹介
http://www.bkjia.com/PHPjc/477139.html
www.bkjia.com
本当
http://www.bkjia.com/PHPjc/477139.html
技術記事
XML は、データベースのような形式でデータを保存する、一般的な半構造化ファイル形式です。実際のアプリケーションでは、単純でセキュリティの低いデータには XML ファイルがよく使用されます...

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。