用PHP5的SimpleXML解析XML文檔_PHP教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:使用PHP生成1000個隨機注冊碼
      一般程序中都需要用到注冊碼,為了防止盜版,如果把生成的注冊碼保存到數據庫里,并且通過軟件在客戶端訪問服務器來匹配客戶端輸入的驗證碼是否正確,這是一種好的解決盜版的方案。 下面描述

      以下為引用的內容:
      messages.xml
      ========================================================
      <?xml version="1.0" ?>
      <!--Sample XML document -->
      <SystemMessage>
           <MessageTitle>System Down for Maintenance</MessageTitle>
          <MessageBody>Going down for maintenance soon!</MessageBody>
          <MessageAuthor>
         <MessageAuthorName>Joe SystemGod</MessageAuthorName>
         <MessageAuthorEmail>systemgod@someserver.com
      </MessageAuthorEmail>
          </MessageAuthor>
          <MessageDate>March 4, 2004</MessageDate>
         <MessageNumber>10</MessageNumber>
      </SystemMessage>
      ========================================================

      xml 是一種創建元數據的語言,元數據是描述其它數據的數據,PHP中的XML處理是基于LIBXML2的,安裝時默認開啟。

      可以通過phpinfo()函數查看是否開啟了XML處理模塊,DOM,LIBXML,SAMPLEXML。

      首先,通過samplexml_load_file函數把xml文件加載到一個對象中,samplexml_load_file可以用戶遠程文件。

      例如:

      $xml = samplexml_load_file("messages.xml"); // 本地文件系統,當前目錄

      $xml = samplexml_load_file("http://www.xml.org.cn/messages.xml"); // 遠程web服務器

      用 var_dump($xml) 和 print_r($xml) 分別輸出其結構.var_dump給出了變量的類型和長度,而print_r可讀性更強輸出對象中的所有元素名稱和它的值。

      echo $xml->MessageTitle; //輸出消息的標題

      echo $xml->MessageBody; // 輸出消息體

      echo $xml->MessageAuthor; //消息的作者

      echo $xml->MessageDate;  // 消息產生的日期

      echo $xml->MessageNumber;  // 消息代碼

      ===================================================

      另外,還有一個函數,可以把XML字符串加載到一個simplexml對象中取。

      以下為引用的內容:

      $channel =<<<_XML_
      <channel>
      <title>What's For Dinner</title>
      <link>http://menu.example.com/</link>
      <description>These are your choices of what to eat tonight. </description>
      </channel>
      _XML_;

      $xml = simplexml_load_string($channel);
      ===================================================

      rss.xml

      =============================================
      <?xml version="1.0" encoding="utf-8"?>
      <rss version="0.91">
      <channel>
       <title>What's For Dinner</title>
       <link>http://menu.example.com/</link>
       <description>These are your choices of what to eat tonight.</description>
       <item>
        <title>Braised Sea Cucumber</title>
        <link>http://menu.example.com/dishes.php?dish=cuke</link>
        <description>Gentle flavors of the sea that nourish and refresh you. </description>
       </item>
       <item>
        <title>Baked Giblets with Salt</title>
        <link>http://menu.example.com/dishes.php?dish=giblets</link>
        <description>Rich giblet flavor infused with salt and spice. </description>
       </item>
       <item>
        <title>Abalone with Marrow and Duck Feet</title>
        <link>http://menu.example.com/dishes.php?dish=abalone</link>
        <description>There's no mistaking the special pleasure of abalone. </description>
       </item>
      </channel>
      </rss>
      =====================================================

      1、訪問具有相同元素名稱的節點

      2、通過foreach循環所有相同元素名稱的子節點

      以下為引用的內容:
      foreach($xml->channel->item as $key=>$value)
      {
      print "Title: " . $item->title . "\n";
      }

      3、輸出整個文檔

      echo $xml->asXML();

      4、把節點作為字符串輸出

      echo $xml->channel->item[0]->asXML();

      這將輸出文本

      以下為引用的內容:
      <item>
      <title>Braised Sea Cucumber</title>
      <link>http://menu.example.com/dishes.php?dish=cuke</link>
      <description>Gentle flavors of the sea that nourish and refresh you. </description>
      </item>

      帶文件名參數的asXML將會把原本輸出的內容保存為一個文件

      $xml->channel->item[0]->asXML("item[0].xml");

      完整的代碼:

      以下為引用的內容:

      rss.xml
      =====
      <?xml version="1.0" encoding="utf-8"?>
      <rss version="0.91">
      <channel>
       <title>What's For Dinner</title>
       <link>http://menu.example.com/</link>
       <description>These are your choices of what to eat tonight.</description>
       <item>
        <title>Braised Sea Cucumber</title>
        <link>http://menu.example.com/dishes.php?dish=cuke</link>
        <description>Gentle flavors of the sea that nourish and refresh you. </description>
       </item>
       <item>
        <title>Baked Giblets with Salt</title>
        <link>http://menu.example.com/dishes.php?dish=giblets</link>
        <description>Rich giblet flavor infused with salt and spice. </description>
       </item>
       <item>
        <title>Abalone with Marrow and Duck Feet</title>
        <link>http://menu.example.com/dishes.php?dish=abalone</link>
        <description>There's no mistaking the special pleasure of abalone. </description>
       </item>
      </channel>
      </rss>

      rss.php
      ======
      <?php
      $xml = simplexml_load_file("rss.xml");

      echo "<h3>".$xml->channel->title."</h3><br>";
      echo "<ul>";
      echo "<li>Title:".$xml->channel->item[0]->title."</li>";
      echo "<li>Title:".$xml->channel->item[1]->title."</li>";
      echo "<li>Title:".$xml->channel->item[2]->title."</li>";
      echo "</ul>";
      print "Title: " . $xml->channel->item[0]->title . "\n<br>";
      print "Title: " . $xml->channel->item[1]->title . "\n<br>";
      print "Title: " . $xml->channel->item[2]->title . "\n<br>";
      echo "<hr>";

      foreach ($xml->channel->item[0] as $element_name => $content) {
        print "The $element_name is $content\n<br>";
      }

      echo "<hr>";
      print_r($xml);
      echo $xml->channel->item[0]->asXML();
      ?>

      任何XML文本在輸出前最好用 htmlentiteis() 函數編碼后再輸出,否這可能出現問題

      分享:新手通過實例學習動態網頁PHP的語法
      以下為引用的內容: <?php echo "Hello, World!"; ?> 運行結果: Hello, World! 變量標記為“

      來源:模板無憂//所屬分類:PHP教程/更新時間:2008-08-22
      相關PHP教程