2013-02-03 24 views
0

使用xml數據提要使用simplexml獲取信息,然後使用該數據生成頁面。使用simplexml對xml數據提要進行'高效'調用

這種即時得到使用

$xml = simplexml_load_file 

我是XML提要正確的思想,要解析服務器下載它的XML數據的所有才能與它的工作?

很明顯,這對2kb文件沒有這樣的問題,但有些文件接近100kb,因此每個頁面加載必須在php開始生成頁面之前先下載。

在一些頁面上只查找xml數組的1個屬性,因此解析整個文檔似乎是unessarcery,通常我會考慮緩存Feed,但這些Feed與頻繁更改的活動makets相關,不理想,因爲我總是有最新的數據。

有沒有更好的方法來更有效地調用xml提要?

+0

只需要一點常識來計算出您需要更新信息的頻率。如果迫切需要將XML Feed中的信息以最新的形式顯示爲100%(例如實時股票價格),那麼您應該每次下載新文件。另一方面,如果您不需要最新的信息,爲什麼不在本地服務器上存儲本地副本,並根據需要隨時更新它?如果總是這樣的話,你總是需要一小部分信息,只需存儲你需要的任何變量而不是整個文件。 – Ozzy

+0

你可以指標。一個100kb的文件在這種情況下,我不會考慮這麼大,順便說一下:實際上檢查你是否在牆上跑,這很可能是你不知道沒用。您可能正在尋找一個正則表達式。 – hakre

回答

3

優化XML解析的第一種方法之一是通過即時解析 - 意味着,不要等到整個數據到達時,並且在您需要解析時立即開始解析。

這樣做效率更高,因爲瓶頸通常是網絡連接而不是CPU,所以如果我們能夠在不等待所有網絡信息的情況下找到我們的答案,那麼我們已經進行了很多優化。

你應該谷歌術語XML push parserXML pull parser

在文章Pull parsing XML in PHP - Create memory-efficient stream processing你可以找到一個教程,顯示瞭如何使用綁定在PHP5

這裏的的XMLReader庫PHP做一些代碼從這個頁面的引用,基本上說我剛剛用更好的詞語做了什麼:

PHP 5引入了XMLReader,這是一種用於讀取可擴展標記語言(XML)的新類。與SimpleXML或文檔對象模型(DOM)不同,XMLReader以流模式運行。也就是說,它從頭到尾讀取文檔。您可以在開始看到內容之前開始處理內容。這使得它非常快速,非常有效,並且非常節省內存。你需要處理的文件越大,這就越重要。

解析流模式與程序解析有點不同。請記住,所有數據都不在那裏。你通常需要做的是提供事件處理程序來實現某種狀態機。如果您看到標籤A,請執行此操作,如果您看到標籤B,請執行此操作。

關於推解析拉解析看看this article之間的差異。長話短說,都是基於流的解析器。您可能需要一個推送解析器,因爲您希望解析每當數據通過您的XML提要通過網絡到達時。

也可以使用xml_parse()(帶有libxml兼容層的libexpat)完成PHP中的推送解析。你可以看到一個代碼示例xml_parse PHP manual page