基于SAX的解析器不寻求内容

时间:2011-07-16 21:26:07

标签: php xml parsing sax

我正在尝试实现基于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 个答案:

答案 0 :(得分:2)

根据您的评论,$id永远不会成真。也许你想要attribs有一个id而不是元素的名字。例如,如果您有XML

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

你得到了

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

(这出来了一些php-python,但我希望你明白我的观点)

这真的是你的错误吗?

根据http://www.phpcatalyst.com/php-compare-strings.php,您应始终使用===比较字符串。那是你的错吗?

答案 1 :(得分:1)

您只使用了xml_set_element_handler - 回调。只有那些:

  

设置开始和结束元素处理程序

如果您还想检索这些标记的内容,还需要注册xml_set_character_data_handler - 回调。因为这一个:

  

设置字符数据处理程序