XML ベースのアプリケーションを操作する場合、開発者は多くの場合、XML でエンコードされたデータ構造を作成する必要があります。たとえば、ユーザー入力に基づく Web の XML 状態テンプレート、サーバー要求 XML ステートメント、実行時パラメーターに基づくクライアント応答などです。
XML データ構造の構築には時間がかかりますが、成熟した PHP DOM アプリケーション プログラミング インターフェイスを使用すれば、すべてがシンプルかつ明確になります。この記事では、PHP DOM アプリケーション インターフェイスの主な機能を紹介し、正しく完全な XML ファイルを生成してディスクに保存する方法を示します。
ドキュメントタイプ宣言を作成する
一般的に言えば、XML宣言はドキュメントの先頭に配置されます。 PHP での宣言は非常に簡単です。DOM ドキュメント クラスのオブジェクトをインスタンス化し、それにバージョン番号を与えるだけです。プログラム リスト A を表示:
プログラム リスト A
コードをコピー コードは次のとおりです:
// create doctype
$dom = new 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
コードをコピーします コードは次のとおりです:
// create doctype
$dom = new DOMDocument("1.0")
// ブラウザにドキュメントを表示します。プレーンテキストとして
// 読みやすさのため
header("Content-Type: text/plain");
// ルート要素を作成
$root = $dom->createElement("toppings"); ;appendChild($ root);
// 子要素を作成
$item = $dom->createElement("item")
$root->appendChild($item);
$text = $dom->createTextNode("pepperoni");
$item->appendChild($text);
echo $dom->saveXML()?>ここでは、まず という名前のルート要素を作成し、XML ヘッダー ファイルに配置します。次に、- という名前の要素を作成し、それをルート要素にします。最後に、値「pepperoni」を持つ別のテキスト ノードを作成し、それを
- 要素に割り当てます。最終的な結果は次のようになります:
コードをコピーします
コードは次のとおりです:
- pepperoni item>
別のトッピングを追加したい場合は、リスト C に示すように、別の - を作成して、別のコンテンツを追加します。
プログラムリストC
コードをコピーします
コードは次のとおりです:
// create doctype
$dom = new DOMDocument("1.0") // ブラウザにドキュメントを表示します。プレーンテキストとして // 読みやすさのため header("Content-Type: text/plain"); // ルート要素を作成
$root = $dom->createElement("toppings"); ;appendChild($ root);
// 子要素を作成
$item = $dom->createElement("item")
$root->appendChild($item);
$text = $dom->createTextNode("pepperoni");
$item->appendChild($text);
$item = $dom->createElement("item"); ->appendChild ($item);
// 別のテキスト ノードを作成します
$text = $dom->createTextNode("Tomato");
$item->appendChild($text);ツリー
echo $ dom->saveXML()
;
以下は、プログラム リスト C を実行した後の出力です。
コードをコピーします。 コードは次のとおりです。
item>pepperoni item>
- トマト
属性を追加する
属性を使用すると、要素に適切な情報を追加することもできます。 PHP DOM API の場合、属性を追加するには 2 つの手順が必要です。まず、DOM ドキュメント オブジェクトの createAttribute() メソッドを使用して属性名を持つノードを作成し、次に属性値を持つ属性ノードにドキュメント ノードを追加します。詳細については、リスト D を参照してください。
プログラムリストD
コードをコピーします コードは次のとおりです:
// create doctype
$dom = new DOMDocument("1.0")
// ブラウザにドキュメントを表示します。プレーンテキストとして
// 読みやすさのため
header("Content-Type: text/plain");
// ルート要素を作成
$root = $dom->createElement("toppings"); ;appendChild($ root);
// 子要素を作成
$item = $dom->createElement("item")
$root->appendChild($item);
$text = $dom->createTextNode("pepperoni");
$item->appendChild($text);
$price = $dom->createAttribute("price"); ->appendChild ($price);
// 属性値ノードを作成
$priceValue = $dom->createTextNode("4");
$price->appendChild($priceValue); Tree
echo $ dom->saveXML();
?>
コードをコピーします
コードは次のとおりです:
pepperoni
CDATAモジュールとプロセスウィザードを追加しますCDATAモジュールとプロセスウィザードはあまり使用されませんが、DOM ドキュメント オブジェクトの createCDATASection() メソッドと createProcessingstruction() メソッドを呼び出すことにより、PHP API は CDATA とプロセス ウィザードもサポートします (リスト E を参照)。 プログラムリストE
コードをコピーします
コードは次のとおりです:
// create doctype
// create doctype
$dom = new DOMDocument("1.0");
/ / ドキュメントをプレーンテキストとしてブラウザに表示します
// 読みやすくするために header("Content-Type: text/plain") // ルート要素を作成します $root = $dom->createElement("toppings"); $dom->appendChild($root);
// 子要素を作成します
$item = $dom->createElement("item");
$root->appendChild($item);テキストノード
$ text = $dom->createTextNode("pepperoni");
$item->appendChild($text);
// 属性ノードを作成
$price = $dom->createAttribute("price" );
$ item->appendChild($price);
// 属性値ノードを作成します
$price->appendChild($priceValue); // CDATA セクションを作成
$cdata = $dom->createCDATASection(" 顧客はピザを 16 枚の正方形にスライスすることを要求しました ");
$root->appendChild($cdata); $pi = $dom->createProcessingstruct("pizza", "bake()");
$root->appendChild($pi);
echo $dom->saveXML() ;>
コードは次のとおりです
ペパロニ
顧客はピザを16枚の正方形にスライスすることを要求しました
]]>
;
結果を保存する
目標を達成したら、結果をファイルに保存するか、PHP 変数に保存できます。結果は、ファイル名を指定して save() メソッドを呼び出してファイルに保存するか、saveXML() メソッドを呼び出して PHP 変数に保存できます。次の例を参照してください (プログラム リスト F):
プログラム リスト F
コードをコピーします
コードは次のとおりです:
// doctype を作成します
$dom = new DOMDocument("1.0");
// ルート要素を作成します
$root = $dom->createElement("toppings");
$dom->appendChild($root);
$dom->formatOutput=true;
// 子要素を作成します
$item = $dom->createElement("item");
$root->appendChild($item);
// テキストノードを作成します
$text = $dom->createTextNode("pepperoni");
$item->appendChild($text);
// 属性ノードを作成します
$price = $dom->createAttribute("price");
$item->appendChild($price);
// 属性値ノードを作成します
$priceValue = $dom->createTextNode("4");
$price->appendChild($priceValue);
// CDATA セクションを作成
$cdata = $dom->createCDATASection(" お客様はピザを
16 枚の正方形にスライスすることを要求しています ");
$root->appendChild($cdata);
// PI を作成します
$pi = $dom->createProcessingstruct("pizza", "bake()");
$root->appendChild($pi);
// ツリーをファイルに保存
$dom->save("order.xml");
// ツリーを文字列に保存
$order = $dom->save("order.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($result) { $xmlDoc = 新しい DOMDocument(); if(!file_exists("01.xml")){
$xmlstr = "<メッセージ>メッセージ>"; $xmlDoc->loadXML($xmlstr);
$xmlDoc->save("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["ユーザー名"]));
$node2->appendChild($text2);
$Root->appendChild($node1);
$Root->appendChild($node2);
$xmlDoc->save("01.xml");
}
}
mysql_close($conn);
?>
test.php(应用测试)
复制代码
代码如下:
$xmlDoc = 新しい DOMDocument();
$xmlDoc->load("http://localhost/xml/xml.php");
$x=$xmlDoc->getElementsByTagName('name'); for ($i=0; $ilength-1; $i++) { if(strpos($x->item($i)->nodeValue,"fang") !==false) { echo $x->item($i)->parentNode->childNodes->item(1)->nodeValue;
} }
?>
http://www.bkjia.com/PHPjc/320916.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/320916.html
技術記事
たとえば、Web では、ユーザーが入力した XML ステータス モデル、サーバー要求、および XML ベースの XML アプリケーション プログラムを処理する場合に、XML コード データ構造を構築する必要があります。