2012-03-07 30 views
0

到現在爲止我在做@simplexml_load_file並在返回的XML我是xpath得到XML,並用它在PHP

的網站會以最快的方式得到了很大的流量,它正在採取了大量的時間爲XML加載。

的主人告訴我嘗試get_file_contents但我不知道怎麼做才能閱讀到返回的內容作爲XML對象做

他們說,試圖捲曲或WGET但對我來說是一樣的像第一個我堅持

我能做些什麼來獲得xml,儘可能從合作伙伴api獲得儘可能多的權利,並且仍然能夠將其作爲xml讀取?

+2

什麼花時間?純*下載*或解析和提取信息*?我們在這裏說「多久」? – deceze 2012-03-07 05:20:05

回答

0

這聽起來像是當您的數據處於字符串中時,您無法將XML轉換爲SimpleXML。使用simplexml_load_stringfile_get_contents解析數據,或者如果您遠程獲取數據(通過cURL等)。

我最大的建議是不使用xpath,因爲它確實會產生開銷;而只需引用標準對象語法中的元素:$xml->path->value

+1

首先,在知道問題出現之前不要進行優化。 'simplexml_load_string'已經可以加載URL。您只需將它作爲文件傳遞,與許多其他PHP函數類似。 XPath確實施加了開銷,但範圍可以從小到重。我們需要更多信息。 – 2012-03-07 05:26:29

2

PHP中最快的XML庫是xmlreader。這實在是太晦澀(我認爲這對那些誰瞭解它,並能夠使用它很少PHP的用戶),但它是速度極快,因爲:

向XMLReader擴展是一個XML pull解析器。閱讀器充當向文檔流前進的光標,並停在路上的每個節點上。

這意味着XML文檔沒有完全預加載到內存中。只有當前分析的部分被加載到內存中。

1

「獲得xml的最快方式」是一個矛盾。
XML並不打算快,它的目的是兼容。

所以,如果你需要速度 - 你需要另一種格式。另一種方法。

  1. 存儲你的數據的本地,而不是拉過網(!!!)上的每個用戶的請求。
  2. 保持它在數據庫中,而不是XML文件

這就是全部。

延伸閱讀:從Stackoveflow創始人的文章:Back to Basics by Joel Spolsky

+1

如何用last.fm API做到這一點?它非常**,所以你不可能同步所有。 – jpic 2012-03-08 10:00:18

+0

但是在某個地方我們需要使用XML,例如獲取和分析網站訂閱源!問題是要選擇讀取和處理XML文件的最佳方法。 – 2015-05-20 14:46:27

0

我明白的是你首先讀取該文件,然後

$字符串=的file_get_contents($文件); $ xml = simplexml_load_string($ string);

它會給你所有的XML節點。 讓假設你有這些節點

$target_node = $xml->NewsItem->NewsComponent->ContentItem; 
      if(isset($target_node)) 
      { 


       foreach($target_node as $child) 
       { 

        //isset 
        $story_head = (array)$child->DataContent->CPOnlineFile->CPIndexStoryHead; 
        if(isset($story_head)) 
        { 
// go on further by looping and arrowing nodes you will get your desired output... i parse my xml by like this 
} 
} 
} 

它只是給你一個想法,你如何能做到這一點...

0

Here有一個很好的博客大約比較反對的SimpleXML和DOM的XMLWriter類測試結果表示當您使用XML文件並且使用大數據而不是其他解決方案時,XMLWriter類的速度更快

XMLReader類在結果中與XMLWriter類非常相似。

我希望這有幫助。