My XML document:
www.llcrew.com/test/xml/discography.xml
My PHP script:
www.llcrew.com/test/xml/index.php
I'm trying to display the tracks of each release seperately. However, my current script is displaying the tracks (for all releases combined). Here is my source:
<head>
<title>Discography</title>
<link rel="stylesheet href="../styles/stand.css" type="text/css">
</head>
<body bgcolor="#ffffff" topmargin="10" leftmargin="10" marginheight="10" marginwidth="10">
<?
if(!($fp = fopen("discography.xml" , "r")))
die("Couldn't open xml file!");
///////////////////////////////////////////////////////////////////////////////////////////////////
// global variables //
/////////////////////
$release_counter = 0;
$track_counter = 0;
$release_data = array();
$track_data = array();
$xml_current_tag_state = '';
///////////////////////////////////////////////////////////////////////////////////////////////////
// parse functions //
////////////////////
function startElementHandler($parser, $element_name, $element_attribs) {
global $release_counter;
global $track_counter;
global $release_data;
global $track_data;
global $xml_current_tag_state;
$xml_current_tag_state = $element_name;
if ($element_name == "RELEASE") {
$release_data[$release_counter]["title"] = $element_attribs["TITLE"];
} else {
$xml_current_tag_state = $element_name;
}
if ($element_name == "RELEASE") {
$release_data[$release_counter]["type"] = $element_attribs["TYPE"];
} else {
$xml_current_tag_state = $element_name;
}
}
function endElementHandler($parser, $element_name) {
global $release_counter;
global $track_counter;
global $release_data;
global $track_data;
global $xml_current_tag_state;
$xml_current_tag_state = '';
if ($element_name == "RELEASE") {
$release_counter++;
}
if ($element_name == "TRACK") {
$track_counter++;
}
}
function characterDataHandler ($parser , $data) {
global $release_counter;
global $release_data;
global $track_data;
global $track_counter;
global $xml_current_tag_state;
if ($xml_current_tag_state == '')
return;
if ($xml_current_tag_state == "TITLE") {
$release_data[$release_counter]["title"] = $data;
}
if ($xml_current_tag_state == "TYPE") {
$release_data[$release_counter]["type"] = $data;
}
if ($xml_current_tag_state == "FORMAT") {
$release_data[$release_counter]["format"] = $data;
}
if ($xml_current_tag_state == "YEAR") {
$release_data[$release_counter]["year"] = $data;
}
if ($xml_current_tag_state == "IMAGE_SOURCE") {
$release_data[$release_counter]["image_source"] = $data;
}
if ($xml_current_tag_state == "TRACK") {
$track_data[$track_counter]["track"] = $data;
}
}
if(!($xml_parser = xml_parser_create()))
die("Couldn't create XML parser!");
xml_set_element_handler($xml_parser, "startElementHandler", "endElementHandler");
xml_set_character_data_handler($xml_parser, "characterDataHandler");
while($data = fread($fp, 4096)) {
if(!xml_parse($xml_parser, $data, feof($fp))) {
break; // get out of while loop if we're done with the file
}
}
xml_parser_free($xml_parser);
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// display data //
/////////////////
function display($title, $type, $format, $year, $image_source) {
global $track_counter;
global $track_data;
echo("<img src=\"images/" . $image_source . ".gif\">" . "<br>\n" .
"<b>" . $title . "</b> - " .
$type . " - " . $format . " (" . $year . ")\n" .
"<ul>\n");
for ($j = 0; $j < $track_counter; $j++) {
echo("<li>" . $track_data[$j]["track"] . "</li>\n");
}
echo("</ul>\n\n");
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// initiate //
/////////////
for ($i = 0; $i < $release_counter; $i++) {
display($release_data[$i]["title"],
$release_data[$i]["type"],
$release_data[$i]["format"],
$release_data[$i]["year"],
$release_data[$i]["image_source"]);
}
?>
</body>