ホームページ > バックエンド開発 > PHPチュートリアル > phpに基づいて生成されたxmlの解析例

phpに基づいて生成されたxmlの解析例

coldplay.xixi
リリース: 2023-04-08 20:46:02
転載
2621 人が閲覧しました

phpに基づいて生成されたxmlの解析例

php は XML の簡単なサンプル コードを生成します

PHP DOMDocument を使用して動的 XML ファイルを作成します

XML ベースを扱う場合アプリケーションでは、開発者は多くの場合、XML エンコードされたデータ構造を作成する必要があります。たとえば、ユーザー入力に基づく Web の XML ステータス テンプレート、サーバー要求 XML ステートメント、実行時パラメーターに基づくクライアント応答などです。
XML データ構造の構築には時間がかかりますが、成熟した PHP DOM アプリケーション プログラミング インターフェイスを使用すれば、すべてがシンプルかつ明確になります。この記事では、PHP DOM アプリケーション インターフェイスの主な機能を紹介し、正しく完全な XML ファイルを生成してディスクに保存する方法を示します。
ドキュメント型宣言の作成
一般的に、XML 宣言はドキュメントの先頭に配置されます。 PHP での宣言は非常に簡単です。DOM ドキュメント クラスのオブジェクトをインスタンス化し、それにバージョン番号を与えるだけです。番組リスト A を表示する:
番組リスト A

<?php 
    // create doctype 
    $dom = new DOMDocument("1.0"); 
    // display document in browser as plain text 
    // for readability purposes 
    header("Content-Type: text/plain"); 
    // save and display tree 
    echo $dom->saveXML(); 
?>
ログイン後にコピー

DOM ドキュメント オブジェクトの saveXML() メソッドに注意してください。このメソッドについては後ほど詳しく説明しますが、ここでは、このメソッドが XML ドキュメントの現在のスナップショットをファイルまたはブラウザに出力するために使用されることを簡単に理解する必要があります。この例では、可読性を高めるために ASCII テキストをブラウザに直接出力しました。実際のアプリケーションでは、テキスト/XML ヘッダー ファイルをブラウザーに送信できます。


ブラウザで出力を表示すると、次のコードが表示されます:

要素とテキスト ノードの追加
XML の真の力は、その要素とカプセル化されたコンテンツから生まれます。幸いなことに、DOM ドキュメントを初期化すると、多くの操作が非常に簡単になります。このプロセスには、次の 2 つの手順が含まれます。
追加する要素またはテキスト ノードごとに、要素名またはテキスト コンテンツを介して DOM ドキュメント オブジェクトの createElement() メソッドまたは createTextNode() メソッドを呼び出します。これにより、要素またはテキスト ノードに対応する新しいオブジェクトが作成されます。
要素またはテキスト ノードを XML ドキュメント ツリーの親ノードに追加するには、ノードの appendChild() メソッドを呼び出し、前の手順で作成したオブジェクトを渡します。
次の例は、これら 2 つのステップを明確に示しています。リスト B を参照してください。
プログラム リスト B

<?php 
    // create doctype 
    $dom = new DOMDocument("1.0"); 
     
    // display document in browser as plain text 
    // for readability purposes 
    header("Content-Type: text/plain");
      
    // create root element 
    $root = $dom->createElement("toppings"); 
    $dom->appendChild($root); 
     
    // create child element 
    $item = $dom->createElement("item"); 
    $root->appendChild($item); 
     
    // create text node 
    $text = $dom->createTextNode("pepperoni"); 
    $item->appendChild($text); 
     
    // save and display tree 
    echo $dom->saveXML(); 
?>
ログイン後にコピー

ここでは、まず という名前のルート要素を作成し、それを XML ヘッダー ファイルに属性付けします。次に、 という名前の要素を作成し、それをルート要素にします。最後に、値「pepperoni」を持つテキスト ノードを作成し、それを 要素に割り当てます。最終結果は次のようになります:

<?xml version="1.0"?> 
<toppings> 
    <item>pepperoni</item> 
</toppings>
ログイン後にコピー

別のトッピングを追加したい場合は、リスト C に示すように、別の を作成し、別のコンテンツを追加します。
プログラム リスト C

<?php 
    // create doctype 
    $dom = new DOMDocument("1.0"); 
     
    // display document in browser as plain text 
    // for readability purposes 
    header("Content-Type: text/plain"); 
     
    // create root element 
    $root = $dom->createElement("toppings"); 
     
    $dom->appendChild($root); 
    // create child element 
     
    $item = $dom->createElement("item"); 
    $root->appendChild($item); 
     
    // create text node 
    $text = $dom->createTextNode("pepperoni"); 
    $item->appendChild($text); 
     
    // create child element 
    $item = $dom->createElement("item"); 
    $root->appendChild($item); 
     
    // create another text node 
    $text = $dom->createTextNode("tomato"); 
    $item->appendChild($text); 
     
    // save and display tree 
    echo $dom->saveXML(); 
?>
ログイン後にコピー

以下は、プログラム リスト C を実行した後の出力です。

<?xml version="1.0"?> 
<toppings> 
    <item>pepperoni</item> 
    <item>tomato</item> 
</toppings>
ログイン後にコピー

属性の追加
属性を使用すると、要素に適切な情報を追加することもできます。 PHP DOM API の場合、属性を追加するには 2 つの手順が必要です。まず、DOM ドキュメント オブジェクトの createAttribute() メソッドを使用して属性名を持つノードを作成し、次に属性値を持つ属性ノードにドキュメント ノードを追加します。詳細については、リスト D を参照してください。
プログラム リスト D

<?php 
    // create doctype 
    $dom = new DOMDocument("1.0"); 
     
    // display document in browser as plain text 
    // for readability purposes 
    header("Content-Type: text/plain"); 
     
    // create root element 
    $root = $dom->createElement("toppings"); 
    $dom->appendChild($root); 
     
    // create child element 
    $item = $dom->createElement("item"); 
    $root->appendChild($item); 
     
    // create text node 
    $text = $dom->createTextNode("pepperoni"); 
    $item->appendChild($text); 
     
    // create attribute node 
    $price = $dom->createAttribute("price"); 
    $item->appendChild($price); 
     
    // create attribute value node 
    $priceValue = $dom->createTextNode("4"); 
    $price->appendChild($priceValue); 
     
    // save and display tree 
    echo $dom->saveXML(); 
?>
ログイン後にコピー

出力は次のとおりです。

<?xml version="1.0"?> 
<toppings> 
    <item price="4">pepperoni</item> 
</toppings>
ログイン後にコピー

CDATA モジュールとプロセス ウィザードの追加
CDATA モジュールとプロセス ウィザードはあまり使用されませんが、 DOM ドキュメント オブジェクト createCDATASection() メソッドと createProcessingstruction() メソッド、PHP API は CDATA とプロセス ウィザードもサポートしています (リスト E を参照)。
プログラム リスト E

<?php 
    // create doctype 
    // create doctype 
    $dom = new DOMDocument("1.0"); 
     
    // display document in browser as plain text 
    // for readability purposes 
    header("Content-Type: text/plain"); 
     
    // create root element 
    $root = $dom->createElement("toppings"); 
    $dom->appendChild($root); 
     
    // create child element 
    $item = $dom->createElement("item"); 
    $root->appendChild($item); 
     
    // create text node 
    $text = $dom->createTextNode("pepperoni"); 
    $item->appendChild($text); 
     
    // create attribute node 
    $price = $dom->createAttribute("price"); 
    $item->appendChild($price); 
     
    // create attribute value node 
    $priceValue = $dom->createTextNode("4"); 
    $price->appendChild($priceValue); 
     
    // create CDATA section 
    $cdata = $dom->createCDATASection(" Customer requests that pizza be sliced into 16 square pieces "); 
    $root->appendChild($cdata); 
     
    // create PI 
    $pi = $dom->createProcessingInstruction("pizza", "bake()"); 
    $root->appendChild($pi); 
     
    // save and display tree 
    echo $dom->saveXML(); 
?>
ログイン後にコピー

出力は次のようになります:

<?xml version="1.0"?> 
<toppings> 
<item price="4">pepperoni</item> 
<![CDATA[ 
Customer requests that pizza be sliced into 16 square pieces 
]]> 
<?pizza bake()?> 
</toppings>
ログイン後にコピー

結果の保存
目標を達成したら、結果をファイルに保存するか、保存できます。 PHP変数に。結果は、ファイル名を指定して save() メソッドを呼び出してファイルに保存するか、saveXML() メソッドを呼び出して PHP 変数に保存できます。次の例 (プログラム リスト F) を参照してください。
プログラム リスト F

<?php 
    // create doctype 
    $dom = new DOMDocument("1.0"); 
     
    // create root element 
    $root = $dom->createElement("toppings"); 
    $dom->appendChild($root); 
    $dom->formatOutput=true; 
     
    // create child element 
    $item = $dom->createElement("item"); 
    $root->appendChild($item); 
     
    // create text node 
    $text = $dom->createTextNode("pepperoni"); 
    $item->appendChild($text); 
     
    // create attribute node 
    $price = $dom->createAttribute("price"); 
    $item->appendChild($price); 
     
    // create attribute value node 
    $priceValue = $dom->createTextNode("4"); 
    $price->appendChild($priceValue); 
     
    // create CDATA section 
    $cdata = $dom->createCDATASection(" Customer requests that pizza be 
    sliced into 16 square pieces "); 
    $root->appendChild($cdata); 
     
    // create PI 
    $pi = $dom->createProcessingInstruction("pizza", "bake()"); 
    $root->appendChild($pi); 
     
    // save tree to file 
    $dom->save("order.xml"); 
     
    // save tree to string 
    $order = $dom->save("order.xml"); 
?>
ログイン後にコピー

以下は実際的な例であり、テストすることができます。
xml.php (xml の生成)

<? 
    $conn = mysql_connect(&#39;localhost&#39;, &#39;root&#39;, &#39;123456&#39;) or die(&#39;Could not connect: &#39; . mysql_error()); 
    mysql_select_db(&#39;vdigital&#39;, $conn) or die (&#39;Can\&#39;t use database : &#39; . mysql_error()); 
    $str = "SELECT id,username FROM `admin` GROUP BY `id` ORDER BY `id` ASC"; 
    $result = mysql_query($str) or die("Invalid query: " . mysql_error()); 
    if($result) { 
        $xmlDoc = new DOMDocument(); 
        if(!file_exists("01.xml")){ 
            $xmlstr = "<?xml version=&#39;1.0&#39; encoding=&#39;utf-8&#39; ?><message></message>"; 
            $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("name"); 
        $text2 = $xmlDoc->createTextNode(iconv("GB2312","UTF-8",$arr["username"])); 
        $node2->appendChild($text2); 
        $Root->appendChild($node1); 
        $Root->appendChild($node2); 
        $xmlDoc->save("01.xml"); 
        } 
    } 
    mysql_close($conn); 
?>
ログイン後にコピー

推奨チュートリアル: 「PHP ビデオ チュートリアル

以上がphpに基づいて生成されたxmlの解析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
xml
ソース:liqingbo.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート