2010-12-03 13 views
3

私はsimpleXMLでXMLファイルを読み込むための小さな関数を書いており、これを使ってPear Benchmark Iterateを使って時間を計っています。私はそのsimpleXMLを読んだことがあり、DOMはXMLファイル全体をメモリに入れてしまい、大きなサイズのファイルにオーバーヘッドが発生する可能性があります。XMLからPHP配列に値を取得する

以下の関数は比較的小さいサイズで、XMLファイルから10個の値しか取得しません。

以下の関数の反復(xmlファイルサイズ:200kb)は、平均2.5秒で完了します。

PHP XMLparser、関連するクラス、またはおそらくxmlを配列に解析するための他の効率的な方法を使って解決策を提案する人はいますか?それは心のシフトのビットを必要とするが

のSimpleXMLバージョン

function getItems($file_id, $item_count=5) 
{ 
    switch ($file_id) 
    { 
     case '1': 
     $file = "http://xml_file.xml"; 

     if ($xml = simplexml_load_file($file)) 
     { 
      $i=0; 
      foreach ($xml->info as $info) 
      { 
       if ($i < $item_count) 
       { 
        $var[] = array(
         "id" => (string)$info->id, 
         "name" => (string)$info->name); 
       } 
       $i++; 
      } 
      return $var; 
     } 
    } 
} 

答えて

1

XMLパーサモジュールは、いくつかの外部ライブラリを必要としない、より良い選択肢かもしれません。彼らは、データが完全にメモリにロードされることはないという利点があります。

簡単に言えば、XML文書をツリーの降順で処理し、開始タグと終了タグがハンドラを介して報告されるので、ツリー内の場所のジャーナルを保持する必要があります。

このモジュールはオブジェクト指向ではありませんが、xml_set_objectはこれを軽減しているようです。

関連する問題