2011-07-16 6 views
1

SAXベースのパーサーを実装しようとしていますが、何らかの理由でそれが要素と終了の開始点のみを認識していて、コンテンツがログに含まれていません。 XMLを保持する変数が正しく埋められ、私は単純なログを調べました。SAXベースのパーサーがコンテンツを検索しません

<?php 
    function startElementHandler($parser, $name, $attribs) { 
     if($name == "id"){ 
      $id = TRUE; 
     } 
    } 

    function endElementHandler($parser,$name){ 
     $id = FALSE; 
    } 

    function characterDataHandler($parser,$data){ 
     if($id == TRUE){ 
      echo $data; 
     } 
    } 

    global $id; 
    $id = FALSE; 

    $parser = xml_parser_create(); 
    xml_set_element_handler($parser, "startElementHandler","endElementHandler"); 
    xml_set_character_data_handler($parser,"characterDataHandler"); 

    $xml = file_get_contents("http://itunes.apple.com/de/rss/topfreeapplications/limit=100/xml"); 
    xml_parse($parser,$xml); 

    //xml_parser_free($parser); 
?> 

私はコンテンツを受け取ることができるかどれ提案:ここ は、コードのですか?たぶん、私は瞬間に気づいていない奇妙なものを見逃しています。 よろしくお願いします。 tim

+0

は必ず$ idは真になるあなたはありますか?もしそうなら、XMLのその部分を投稿してください。 – Guy

+0

mhm、確かに、strangly $ idは決して真実にはならない。 –

答えて

2

$idは決してtrueになりません。たぶんあなたは、要素の名前ではなくidを持つように属性を設定することをお勧めします。あなたがXML

<div id="x"> blah </div> 

を持っている場合たとえば、あなたは

$name="div", $attribs={"id":"x"} 

(これはPHP-のpythonのビットを出てきたが、私はあなたが私のポイントを得ることを願っ)

が本当にあることですし得ますあなたのバグ?

http://www.phpcatalyst.com/php-compare-strings.phpによれば、常に===を使用して文字列を比較する必要があります。それはあなたのバグですか?

+0

Mhm、xmlは次のようになります。 ' ... ....' –

1

xml_set_element_handler -callbacksのみを使用しました。唯一のものは:あなたはまた、これらのタグの内容を取得したい場合は

開始と終了要素ハンドラ

を設定し、あなたもxml_set_character_data_handler -callbackを登録する必要があります。このため、1:

設定した文字データハンドラ

+0

私は文字データハンドラを設定しました。 –

+0

あなたは何を得ていますか? –

関連する問題