//全局变量
$xml_parser=””;
$songs=array();
$number_dicts=0;
$current_key=””;
$current_element=””;
$current_data=””;
$end_of_songs=FALSE;
//文件路径
$target = ‘./test.plist’;
//文件名称
$filename = ‘test.plist’;
//建立一个 XML 解析器
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1);
xml_set_element_handler($xml_parser, “start_element”, “end_element”);
xml_set_character_data_handler($xml_parser, “character_data”);
if (!($fp = @fopen($target, “r”))) {
return false;
}
while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf(“XML error: %s at line %d in file %s\n”,
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser),
$filename));
}
}
//释放指定的 XML 解析器
xml_parser_free($xml_parser);
function start_element($parser, $name, $attribs) {
global $current_element, $number_dicts;
if($name==”DICT”){
$number_dicts++;
}
if ($number_dicts>1){
$current_element=$name;
}
}
function end_element($parser, $name) {
global $songs, $current_element, $current_data, $number_dicts, $array_key, $end_of_songs;
if($end_of_songs){
return;
}
if(!empty($current_element)) {
if($current_element==”KEY”){
$array_key=$current_data;
}else{
$songs[$number_dicts][$array_key] .= $current_data;
}
}
}
function character_data($parser, $data) {
global $number_dicts, $current_data, $end_of_songs, $prev_data;
if($data==”Playlists”) {
$end_of_songs=TRUE;
}
$data = str_replace(array(“\r\n”), ”, $data);
$current_data=trim($data);
if(strpos($current_data, “’”) > -1 || strpos($current_data, “’”) > -1 || strpos($current_data, “,”) > -1) {
$current_data = $prev_data.$current_data;
}
else {
$prev_data = $current_data;
}
}
//输出结果
echo ‘
’;
print_r($songs);
echo ‘
’;