PHP 中的 SimpleXML 處理

來源:互聯網
上載者:User
關鍵字 PHP 中的 SimpleXML 處理

瞭解和 php 版本 5 捆綁到一起的 Simplexml 擴充,它使 PHP 頁面能夠以 PHP 友好的文法來查詢、搜尋、修改和重新發布 XML。

PHP 版本 5 引入了 SimpleXML,一種用於讀寫 XML 的新的API(API)。在 SimpleXML 中,下面的這樣的運算式:

$doc->rss->channel->item->title


  從文檔中選擇元素。只要熟悉文檔的結構,很容易編寫這種運算式。但是,如果不很清楚需要的元素出現在何處(比如 Docbook、HTML 和類似的敘述性文檔中),SimpleXML 可以使用 XPath 運算式尋找這些元素。

開始使用 SimpleXML

假設需要一個 PHP 頁面將 RSS 提要(feed)轉化成 HTML。RSS 是一種簡單的 XML 格式用於發布連鎖內容。文檔的根項目是 rss,它包括一個 channel 元素。channel 元素包含關於提要的中繼資料,如標題、語言和 URL。它還包含各種封裝在 item 元素中的報道。每個 item 都有一個 link 元素,包括一個 URL,還有 title 或 description(通常兩者都有),包含普通文本。不使用名稱空間。RSS 的內容當然不止這些,不過對本文來說知道這些就足夠了。清單 1 顯示了一個典型的例子,它包含兩個新聞項。

清單 1. RSS 提要




Mokka mit Schlag
http://www.elharo.com/blog
en

  Penn Station: Gone but not Forgotten
 
   The old Penn Station in New York was torn down before I was born.
   Looking at these pictures, that feels like a mistake. The current site is
   functional, but no more; really just some office towers and underground
   corridors of no particular interest or beauty. The new Madison Square...
 
  http://www.elharo.com/blog/new-york/2006/07/31/penn-station


  Personal for Elliotte Harold
  Some people use very obnoxious spam filters that require you
   to type some random string in your subject such as E37T to get through.
   Needless to say neither I nor most other people bother to communicate with
   these paranoids. They are grossly overreacting to the spam PRoblem.
   Personally I won't ...

  http://www.elharo.com/blog/tech/2006/07/28/personal-for-elliotte-harold/



我們來開發一個 PHP 頁面將 RSS 提要格式化為 HTML。清單 2 顯示了這個頁面的基本結構。

清單 2. PHP 代碼的靜態結構




<?php // The title will be read from the RSS ?>

// Here we'll put a loop to include each item's title and description
?>




  解析 XML 文檔

第一步是解析 XML 文檔並儲存到變數中。只需要一行代碼,向 simplexml_load_file() 函數傳遞一個 URL 即可:

$rss = simplexml_load_file('http://partners.userland.com/nytRss/nytHomepage.xml');


  對於這個例子,我已經從 Userland 的 New York Times 提要(在 http://partners.userland.com/nytRss/nytHomepage.xml)填充了頁面。當然,也可使用其他 RSS 提要的任何 URL。

要注意,雖然名稱為 simplexml_load_file(),該函數實際上解析遠程 HTTP URL 上的 XML 文檔。但這並不是該函數唯一令人感到奇怪的地方。傳回值(這裡儲存在 $rss 變數中)並沒有指向整個文檔,如果使用過其他 API 如文件物件模型(DOM)您可能會這樣期望。相反,它指向文檔的根項目。從 SimpleXML 不能訪問文檔序言和結語部分的內容。

尋找提要標題

整個提要的標題(不是提要中各報道的標題)位於 rss 根項目 channel 的 title 孩子中。很容易找到這個標題,就彷彿 XML 文檔是類 rss 的一個對象的序列化形式,它的 channel 欄位本身帶有一個 title 欄位。使用常規 PHP 對象引用文法,尋找標題的語句如下:

$title = $rss->channel->title;


  找到之後可以將其添加到輸出 HTML 中。這樣做很簡單,只要回顯 $title 變數即可:

<?php echo $title; ?>


  這一行輸出元素的字串值而不是整個元素。就是說寫入常值內容但不包括標籤。

甚至可以完全跳過中間變數 $title:

<?php echo $rss->channel->title; ?>


  因為該頁面在多處重用這個值,我發現用一個含義明確的變數來儲存會更方便。

……

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.