Тези дни си поиграх и написах (от нулата, с малко помощ разбира се) XML parser, който да вади информацията от last.fm и да ми позволява да я форматирам по какъвто на мене си ми харесва начин. Ето как изглежда кодът:
if (! ($xmlparser = xml_parser_create()) )
{
die (“Cannot create parser”);
}$current = “”;
function start_tag($parser, $name, $attribs) {
global $current;
$current = $name;
if ($name == “TRACK”) {
$attribs = str_replace(“streamable=\”true\””, “”, “streamable=\”true\””);
if (is_array($attribs)) {
while(list($key,$val) = each($attribs)) {
echo strtolower($key).”=\””.$val.”\””;
}
}
}
}function end_tag($parser, $name) {
}xml_set_element_handler($xmlparser, “start_tag”, “end_tag”);
function tag_contents($parser, $data) {
global $current;;
if ($current == “ARTIST”) { echo $data.” – “; }
if ($current == “NAME”) { echo $data.” <br>”; }
}xml_set_character_data_handler($xmlparser, “tag_contents”);
$filename = “recenttracks.xml”; //full URL is also possible
if (!($fp = fopen($filename, “r”))) { die(“cannot open “.$filename); }
while ($data = fread($fp, 4096)){
$data=eregi_replace(“>”.”[[:space:]]+”.”<“,”><“,$data);
if (!xml_parse($xmlparser, $data, feof($fp))) {
$reason = xml_error_string(xml_get_error_code($xmlparser));
$reason .= xml_get_current_line_number($xmlparser);
die($reason);
}
}
xml_parser_free($xmlparser);
В случая това е за Recent Tracks, но идеята е еднаква за всеки един xml файл. Просто таговете в масива ще бъдат различни 🙂 Скоро ще пусна и самите резултати 🙂