XML ベースのアプリケーションを操作する場合、開発者は多くの場合、XML でエンコードされたデータ構造を作成する必要があります。たとえば、ユーザー入力に基づく Web の XML 状態テンプレート、サーバー要求 XML ステートメント、実行時パラメーターに基づくクライアント応答などです。
XML データ構造の構築には時間がかかりますが、成熟した PHP DOM アプリケーション インターフェイスを使用すれば、すべてがシンプルかつ明確になります。この記事では、Dane PHP トレーニング教師が PHP DOM アプリケーション インターフェイスの主な機能を紹介し、正しく完全な XML ファイルを生成してディスクに保存する方法を示します。
ドキュメントタイプ宣言を作成します
一般に、XML 宣言はドキュメントの先頭に配置されます。 PHP での宣言は非常に簡単です。DOM ドキュメント クラスのオブジェクトをインスタンス化し、それにバージョン番号を与えるだけです。番組リストを見る A:
番組リストA
コードは次のとおりです | |
// doctype を作成します $dom = 新しい DOMDocument("1.0"); // ドキュメントをプレーンテキストとしてブラウザに表示します // ドキュメントをプレーンテキストとしてブラウザに表示します // 読みやすくするため header("Content-Type: text/plain"); // ツリーを保存して表示します echo $dom->saveXML(); ?> |
DOM ドキュメント オブジェクトの saveXML() メソッドに注意してください。このメソッドについては後ほど詳しく説明しますが、ここでは、このメソッドが XML ドキュメントの現在のスナップショットをファイルまたはブラウザに出力するために使用されることを簡単に理解する必要があります。この例では、可読性を高めるために ASCII テキストをブラウザに直接出力しました。実際のアプリケーションでは、テキスト/XML ヘッダー ファイルをブラウザーに送信できます。
ブラウザで出力を表示すると、次のコードが表示されます:
要素とテキストノードを追加します
XML の真の力は、その要素とカプセル化されたコンテンツから生まれます。幸いなことに、DOM ドキュメントを初期化すると、多くの操作が非常に簡単になります。このプロセスには次の 2 つのステップが含まれます:
追加する要素またはテキスト ノードごとに、要素名またはテキスト コンテンツを介して DOM ドキュメント オブジェクトの createElement() メソッドまたは createTextNode() メソッドを呼び出します。これにより、要素またはテキスト ノードに対応する新しいオブジェクトが作成されます。
要素またはテキスト ノードを XML ドキュメント ツリーの親ノードに追加するには、ノードの appendChild() メソッドを呼び出し、前の手順で作成したオブジェクトを渡します。
次の例は、これら 2 つのステップを明確に示しています。リスト B を参照してください。
プログラムリストB
コードは次のとおりです | |
// doctype を作成します |
ここでは、まず
<トッピング>
トッピング>
別のトッピングを追加したい場合は、リスト C に示すように、別の
番組リストC
コードは次のとおりです | |
// doctype を作成します |
属性を追加する
PHP で XML を生成するための簡単なサンプル コード (1) の内容を引き続き共有します。次に、北京 PHP トレーニングでは、PHP で XML を生成するための簡単なサンプル コード (2) の内容を引き続き共有します。
属性を使用すると、要素に適切な情報を追加することもできます。 PHP DOM API の場合、属性を追加するには 2 つの手順が必要です。まず、DOM ドキュメント オブジェクトの createAttribute() メソッドを使用して属性名を持つノードを作成し、次に属性値を持つ属性ノードにドキュメント ノードを追加します。詳細については、リスト D を参照してください。
番組リストD
コードは次のとおりです | |
// ドキュメントタイプを作成します $dom = 新しい DOMDocument("1.0"); // ドキュメントをプレーンテキストとしてブラウザに表示します // 読みやすくするため header("Content-Type: text/plain"); // ルート要素を作成します $root = $dom->createElement("トッピング"); $dom->appendChild($root); // 子要素を作成します $item = $dom->createElement("item"); $root->appendChild($item); // テキストノードを作成します $text = $dom->createTextNode("ペパロニ"); $item->appendChild($text); // 属性ノードを作成します $price = $dom->createAttribute("価格"); $item->appendChild($price); // 属性値ノードを作成します $priceValue = $dom->createTextNode("4"); $price->appendChild($priceValue); // ツリーを保存して表示します echo $dom->saveXML(); ?> 出力は次のようになります: <トッピング> トッピング> |
CDATA モジュールとプロセスウィザードの追加
CDATA モジュールとプロセス ウィザードはあまり使用されませんが、PHP API は、DOM ドキュメント オブジェクトの createCDATASection() メソッドと createProcessingstruction() メソッドを呼び出すことで、CDATA とプロセス ウィザードを適切にサポートすることもできます。プログラム リスト E を参照してください。
番組リストE
コードは次のとおりです | |
// doctype を作成します // doctype を作成します $dom = 新しい DOMDocument("1.0"); // ドキュメントをプレーンテキストとしてブラウザに表示します // 読みやすくするため header("Content-Type: text/plain"); // ルート要素を作成します $root = $dom->createElement("トッピング"); $dom->appendChild($root); // 子要素を作成します $item = $dom->createElement("item"); $root->appendChild($item); // テキストノードを作成します $text = $dom->createTextNode("ペパロニ"); $item->appendChild($text); // 属性ノードを作成します $price = $dom->createAttribute("価格"); $item->appendChild($price); // 属性値ノードを作成します $priceValue = $dom->createTextNode("4"); $price->appendChild($priceValue); // CDATA セクションを作成します $cdata = $dom->createCDATASection("顧客はピザを16枚の正方形にスライスすることを要求しました"); $root->appendChild($cdata); // PI を作成します $pi = $dom->createProcessingstruct("ピザ", "bake()"); $root->appendChild($pi); // ツリーを保存して表示します echo $dom->saveXML(); ?> 出力は次のようになります: <トッピング> お客様からピザを16等分にスライスしてほしいとのご要望がありました ]]> トッピング> |
結果を保存する
目標を達成したら、結果をファイルに保存するか、PHP 変数に保存できます。結果は、ファイル名を指定して save() メソッドを呼び出してファイルに保存するか、saveXML() メソッドを呼び出して PHP 変数に保存できます。次の例 (プログラム リスト F) を参照してください:
番組表F
代码如下 | |
// ドキュメントタイプを作成します $dom = 新しい DOMDocument("1.0"); // ルート要素を作成します $root = $dom->createElement(「トッピング」); $dom->appendChild($root); $dom->formatOutput=true; // 子要素を作成します $item = $dom->createElement("アイテム"); $root->appendChild($item); // テキストノードを作成します $text = $dom->createTextNode(「ペパロニ」); $item->appendChild($text); // 属性ノードを作成します $price = $dom->createAttribute("価格"); $item->appendChild($price); // 属性値ノードを作成します $priceValue = $dom->createTextNode("4"); $price->appendChild($priceValue); // CDATA セクションを作成します $cdata = $dom->createCDATASection(" 顧客はピザを とリクエストしています 16枚の正方形にスライスします」); $root->appendChild($cdata); // PI を作成します $pi = $dom->createProcessingstruct("ピザ", "焼く()"); $root->appendChild($pi); // ツリーをファイルに保存します $dom->save("order.xml"); // ツリーを文字列に保存します $order = $dom->save("order.xml"); ?> 以下は実際の例であり、一般の方も試してみることができます。 xml.php(生成xml) $conn = mysql_connect('localhost', 'root', '123456')または die('接続できませんでした: ' . mysql_error()); mysql_select_db('vdigital', $conn)または die('データベースを使用できません: ' . mysql_error()); $str = "SELECT id,username FROM `admin` GROUP BY `id` ORDER BY `id` ASC"; $result = mysql_query($str) または die("無効なクエリ: " . mysql_error()); if($結果) { $xmlDoc = 新しい DOMDocument(); if(!file_exists("01.xml")){ $xmlstr = "<メッセージ>メッセージ>"; $xmlDoc->loadXML($xmlstr); $xmlDoc->保存("01.xml"); } else { $xmlDoc->load("01.xml");} $Root = $xmlDoc->documentElement; while ($arr = mysql_fetch_array($result)){ $node1 = $xmlDoc->createElement("id"); $text = $xmlDoc->createTextNode(iconv("GB2312","UTF-8",$arr["id"])); $node1->appendChild($text); $node2 = $xmlDoc->createElement("名前"); $text2 = $xmlDoc->createTextNode(iconv("GB2312","UTF-8",$arr["username"])); $node2->appendChild($text2); $Root->appendChild($node1); $Root->appendChild($node2); $xmlDoc->保存("01.xml"); } } mysql_close($conn); ?> test.php(应用测试) $xmlDoc = 新しい DOMDocument(); $xmlDoc->load("http://localhost/xml/xml.php"); $x=$xmlDoc->getElementsByTagName('名前'); for ($i=0; $i<=$x->長さ-1; $i++) { if(strpos($x->item($i)->nodeValue,"fang")!==false) { echo $x->item($i)->parentNode->childNodes->item(1)->nodeValue; } } ?> |