0

Lucene ベースの検索を行っているファイルで、この関数 simplexml_load_string() を使用しています。しかし、php4では機能しません。

コーディングをあまり変更する必要がないように、これに似た機能を提案してください。

これは私のコードのサンプルです:-

function handleResponse($data) 
    {
        if ($data) 
        {
            $xml = simplexml_load_string($data);
            $results = array();
            foreach ($xml->result->doc as $story) 
            {
                $xmlarray = array();
                try
                {
                    foreach ($story as $item) 
                    {
                        $name = $item->attributes()->name;
                        $value = $item;
                        $xmlarray["$name"] = "$value";
                    }
                } 
                catch (Exception $e) 
                {
                    echo 'Problem handling XML array.'; 
                }
                if ($this->debug) echo "checking if ".$xmlarray['score']." > ".$this->min_score;
                if ($xmlarray['score'] > $this->min_score) $results[] = $xmlarray;
            }
            $results['response']=$xml->result->attributes()->numFound;
        }
        else
        {
            $results=false;
        }
        return $results;
    }

ここで $data は次のようなxml形式のデータを持っています

<?xml version="1.0" encoding="UTF-8"?>
<response>

<lst name="responseHeader">
 <int name="status">0</int>
 <int name="QTime">2</int>
 <lst name="params">
  <str name="explainOther"/>
  <str name="fl">*,score</str>

  <str name="indent">on</str>
  <str name="start">0</str>
  <str name="q">reliance</str>
  <str name="hl.fl"/>
  <str name="qt">dismax</str>
  <str name="wt">dismax</str>

  <str name="version">2.2</str>
  <str name="rows">10</str>
 </lst>
</lst>
<result name="response" numFound="5" start="0" maxScore="1.7840868">
 <doc>
  <float name="score">1.7840868</float>
  <str name="scheme_name">Reliance Diversified Power Sector Fund - Growth</str>

  <str name="scheme_nav">75.23</str>
 </doc>
 <doc>
  <float name="score">1.7840868</float>
  <str name="scheme_name">Reliance Diversified Power Sector Fund - Growth</str>
  <str name="scheme_nav">75.23</str>
 </doc>
</result>
</response>

simplexml_load_string()コーディングの変更から逃れることができるように、PHP4 に似た機能をいくつか提案してください。

4

3 に答える 3

3

私はこのクラスを自分で使用したことはありませんが、phpClasses.orgはPHP4のsimpleXML実装を採用しており、見た目はかなり問題ありません。

http://www.phpclasses.org/browse/package/4484.html

于 2009-11-17T13:41:01.823 に答える
0

PHP4 は例外をサポートしていません。try...catchブロックを削除してみてください。
編集:また(クレジットは以下のコメントに送られます)、SimpleXML拡張機能はPHP5のみです。PHP4 では、XML パーサー拡張機能を使用する必要がありますが、これはコードを大幅に変更する必要あることも意味します。簡単なGoogle 検索で、この拡張機能の使用方法に関するチュートリアルへのリンクが表示されます。

于 2009-11-17T13:30:28.420 に答える
0

質問に答えるのではなく、環境を更新するように言われるのは嫌ですが、PHP5 に切り替える方法はありませんか? PHP4 は今では本当に時代遅れであり、私の考えでは、新しいプロジェクトにはもう適していません。PHP5 はネイティブ XML サポートを提供しますが、PHP4 ソリューションはすべて非常に低速です。

于 2009-11-17T13:31:52.450 に答える