我正在尝试实现基于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);
?>
有关我如何收到内容的任何建议?也许我错过了一些奇怪的东西,我现在还不知道。 最好的祝福 添
答案 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
- 回调。因为这一个:
设置字符数据处理程序