xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" > freshmeat.net http://freshmeat.net/ freshmeat.net maintains the Web's largest index of Unix and cross-platform open source software. Thousands of applications are meticulously cataloged in the freshmeat.net database, and links to new code are added daily. en-us Technology freshmeat.net freshmeat.net contributors Copyright (c) 1997-2002 OSDN 2002-02-11T10:20+00:00
sloop.splitter 0.2.1 http://freshmeat.net/releases/69583/ A real time sound effects program. 2002-02-11T04:52-06:00
apacompile 1.9.9 http://freshmeat.net/releases/69581/ A full-featured Apache compilation HOWTO. 2002-02-11T04:52-06:00
下面是分析这一文档并显示其中数据的PHP脚本:
// XML file $file = "fm-releases.rdf";
// set up some variables for use by the parser $currentTag = ""; $flag = "";
// create parser $xp = xml_parser_create();
// set element handler xml_set_element_handler($xp, "elementBegin", "elementEnd"); xml_set_character_data_handler($xp, "characterData"); xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, TRUE);
// read XML file if (!($fp = fopen($file, "r"))) { die("Could not read $file"); }
// parse data while ($xml = fread($fp, 4096)) { if (!xml_parse($xp, $xml, feof($fp))) { die("XML parser error: " . xml_error_string(xml_get_error_code($xp))); } }
// destroy parser xml_parser_free($xp);
// opening tag handler function elementBegin($parser, $name, $attributes) { global $currentTag, $flag; // export the name of the current tag to the global scope $currentTag = $name; // if within an item block, set a flag if ($name == "ITEM") { $flag = 1; } }
// closing tag handler function elementEnd($parser, $name) { global $currentTag, $flag; $currentTag = ""; // if exiting an item block, print a line and reset the flag if ($name == "ITEM") { echo "
"; $flag = 0; } }
// character data handler function characterData($parser, $data) { global $currentTag, $flag; // if within an item block, print item data if (($currentTag == "TITLE" || $currentTag == "LINK" || $currentTag == "DESCRIPTION") && $flag == 1) { echo "$currentTag: $data "; } }
?> 看不明白? 别着急,后面将会作出解释。
捕获旗标
这段脚本首先要做的是设定一些全局变量:
// XML file $file = "fm-releases.rdf";
// set up some variables for use by the parser $currentTag = ""; $flag = "";
// opening tag handler function elementBegin($parser, $name, $attributes) { global $currentTag, $flag; // export the name of the current tag to the global scope $currentTag = $name; // if within an item block, set a flag if ($name == "ITEM") { $flag = 1; } }
// closing tag handler function elementEnd($parser, $name) { global $currentTag, $flag; $currentTag = ""; // if exiting an item block, print a line and reset the flag if ($name == "ITEM") { echo ""; $flag = 0; } } 闭标记处理函数也是以标记名称作为其参数。如果是遇到的是一个为的闭标记,变量$flag的值重置为0,并把变量$currentTag的值清空。
// character data handler function characterData($parser, $data) { global $currentTag, $flag; // if within an item block, print item data if (($currentTag == "TITLE" || $currentTag == "LINK" || $currentTag == "DESCRIPTION") && $flag == 1) { echo "$currentTag: $data "; } }
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn