Парсер на базе SAX не ищет контент - PullRequest
1 голос
/ 17 июля 2011

Я пытаюсь реализовать синтаксический анализатор на основе SAX, но каким-то образом он распознает только начало элемента и конец, содержимое не предоставляется в журналах. Переменная, содержащая XML, заполнена правильно, я проверил через простой журнал. Вот код:

<?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);
?>

Любое предложение, как я могу получить содержимое? Может быть, мне не хватает чего-то странного, о чем я не знаю в данный момент. с уважением тим

Ответы [ 2 ]

2 голосов
/ 17 июля 2011

За ваш комментарий, $id никогда не станет правдой.Может быть, вы хотите, чтобы атрибуты имели идентификатор, а не имя элемента.Например, если у вас есть XML

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

Вы получаете

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

(это немного php-python, но я надеюсь, что вы поняли мою точку зрения)

Это действительно ваша ошибка?

Согласно http://www.phpcatalyst.com/php-compare-strings.php вы всегда должны сравнивать строки, используя ===.Это твоя ошибка?

1 голос
/ 17 июля 2011

Вы использовали только обратные вызовы xml_set_element_handler.Только эти:

Настройка обработчиков начального и конечного элементов

Если вы также хотите получить содержимое этих тегов, вам также необходимо зарегистрировать xml_set_character_data_handler -callback.Потому что это:

Настройка обработчика символьных данных

...