i was almost done with everything :) and ofcourse i find a problem with the xml parser... the parser is not collection some vital information, and i dont know why... the xmlsite is: http://www.camelotherald.com/xml/servers.xml
the problem is market with a <-------------- : <server name="Guinevere" type="Roleplay" lastguildupdate="2002-08-18 12:28:53" lastcharupdate="2002-08-16 18:09:06"> <population>1707</population> <status>Up</status> - <relic name="Scabbard of Excalibur" type="Melee" realm="Albion"> <----------------------, the parser dosent retrive this line,, it gets every line except this. <owner>Midgard</owner> </relic> - <relic name="Merlin's Staff" type="Magic" realm="Albion"> <owner>Hibernia</owner> </relic> - <relic name="Thor's Hammer" type="Melee" realm="Midgard"> <owner>Midgard</owner> </relic> - <relic name="Horn of Valhalla" type="Magic" realm="Midgard"> <owner>Hibernia</owner> </relic> - <relic name="Lug's Spear of Lightning" type="Melee" realm="Hibernia"> <owner>Midgard</owner> </relic> - <relic name="Cauldron of Dagda" type="Magic" realm="Hibernia"> <owner>Hibernia</owner> </relic> ....... if u run this script, it prints out everything except that. <?php // ****************** Settings ******************************** $ServerToPrint = "Guinevere"; // *************************************************************** ////////////////////////////////////////////////////////////////// // START OF THE CODE $printedserver = false; $printedrelic = false; $printedkeep = false; $depth = array(); $insideitem = false; $insidekeep = false; $tag = ""; $server = false; $crelic = new RelicInfo; $cserver = new ServerInfo; $ckeep = new KeepInfo; class KeepInfo { var $KeepName = Array(); var $KeepOwner = Array(); var $KeepRealm = Array(); var $KeepClaimant = Array(); function PrintInfo() { for ($i = 0; $i < count($this->KeepName); $i++) { print "<TR><TD><b>{$this->KeepName[$i]}</b>"; print "<TD>{$this->KeepRealm[$i]}</TD>"; print "<TD>{$this->KeepOwner[$i]}</TD>"; print "<TD>{$this->KeepClaimant[$i]}</TD></TR>\n"; } } function SetName($name) { $this->KeepName[] = $name; } function SetOwner($owner) { $this->KeepOwner[] = $owner; } function SetRealm($realm) { $this->KeepRealm[] = $realm; } function SetClaimant($claim) { $this->KeepClaimant[] = $claim; } } class RelicInfo { var $RelicName = Array(); var $RelicType = Array(); var $RelicRealm = Array(); var $RelicOwner = Array(); function PrintInfo() { for ($i = 0; $i < count($this->RelicName); $i++) { print "<TR><TD><b>{$this->RelicName[$i]}</b>"; print "<TD>{$this->RelicType[$i]}</TD>"; print "<TD>{$this->RelicRealm[$i]}</TD>"; print "<TD>{$this->RelicOwner[$i]}</TD></TR>\n"; } } function SetName($name) { $this->RelicName[] = $name; } function SetType($type) { $this->RelicType[] = $type; } function SetRealm($realm) { $this->RelicRealm[] = $realm; } function SetRelicOwner($owner) { $this->RelicOwner[] = $owner; } } class ServerInfo { var $ServerName = Array(); var $ServerPopulation = Array(); var $ServerType = Array(); var $ServerStatus = Array(); var $Totalpop = 0; function PrintInfo() { for ($i = 0; $i < count($this->ServerName); $i++) { print "<TR><TD><b>{$this->ServerName[$i]}</b>"; if ($this->ServerType[$i]) { print "(<i>{$this->ServerType[$i]}</i>)"; } print "</TD>"; print "<TD>{$this->ServerStatus[$i]}</TD>"; print "<TD>{$this->ServerPopulation[$i]}</TD></TR>\n"; } } function PrintTotal() { print $this->Totalpop; } function SetServer($server) { $this->ServerName[] = $server; } function SetType($type) { $this->ServerType[] = $type; } function SetStatus($status) { $this->ServerStatus[] = $status; } function SetPopulation($pop) { $this->ServerPopulation[] = $pop; $this->Totalpop += $pop; } } function startElement($parser, $tagName, $attrs) { global $ServerToPrint, $server, $depth, $insideitem, $insidekeep, $tag, $da_server, $da_type, $da_relicname, $da_relictype, $da_relicrealm, $da_keepname, $da_keeprealm; if ($insideitem) { $tag = $tagName; } elseif ($tagName == "RELIC") { $insideitem = true; while (list ($key, $val) = each ($attrs)) { switch($key) { case "NAME": $da_relicname=$val;print $val;break; case "TYPE": $da_relictype=$val;break; case "REALM": $da_relicrealm=$val;break; } // end case } // end while } elseif($tagName == "SERVER") { $depth[$parser]++; $insideitem = true; while (list ($key, $val) = each ($attrs)) { if ($key == "NAME") { $da_server=$val; if($val == $ServerToPrint) { $server = true; } else { $server = false; } } if ($key == "TYPE") { $da_type=$val; } } // end while } elseif($tagName == "KEEP") { $insideitem = true; $insidekeep = true; while (list ($key, $val) = each ($attrs)) { switch($key) { case "NAME": $da_keepname=$val;break; case "REALM": $da_keeprealm=$val;break; } // end case } // end while } } function characterData($parser, $data) { global $insideitem, $insidekeep, $tag, $da_server, $da_population, $da_type, $da_status,$da_totalpop, $da_relicowner, $da_keepowner, $da_keepclaimant; if ($insideitem) { if ($insidekeep) { switch($tag) { case "OWNER" : $da_keepowner .= $data; break; case "CLAIMANT" : $da_keepclaimant .= $data; break; } } else { switch ($tag) { case "POPULATION": $da_population .= $data; $da_totalpop += $data; break; case "STATUS": $da_status .= $data; break; case "OWNER": $da_relicowner .= $data; break; } } } } function endElement($parser, $tagName) { global $cserver, $ckeep, $crelic, $printedserver, $server, $depth, $insideitem, $insidekeep, $tag, $da_server, $da_population, $da_type, $da_status, $da_relicname, $da_relictype, $da_relicrealm, $da_relicowner, $da_keepowner, $da_keepclaimant, $da_keepname, $da_keeprealm; $depth[$parser]--; if ($tagName == "SERVER") { if ($server) { //if (!$printedserver) { print "<TD><B>Server</B></TD><TD><B>Status</B></TD><TD><B>Users</B></TD></TR>\n"; $printedserver=true; } $cserver->SetServer($da_server); $cserver->SetType($da_type); $cserver->SetStatus($da_status); $cserver->SetPopulation($da_population); } $da_server = ""; $da_population = ""; $da_status = ""; $da_type = ""; $insideitem = false; } elseif ($tagName == "RELIC") { if ($server) { $crelic->SetName($da_relicname); $crelic->SetType($da_relictype); $crelic->SetRealm($da_relicrealm); $crelic->SetRelicOwner($da_relicowner); } $da_relicname = ""; $da_relictype = ""; $da_relicrealm = ""; $da_relicowner = ""; $insideitem = false; } elseif ($tagName == "KEEP") { if ($server) { $ckeep->SetName($da_keepname); $ckeep->SetRealm($da_keeprealm); $ckeep->SetOwner($da_keepowner); $ckeep->SetClaimant($da_keepclaimant); } $da_keepname = ""; $da_keeprealm = ""; $da_keepowner = ""; $da_keepclaimant = ""; $insideitem = false; $insidekeep = false; } } // Create an XML parser $xml_parser = xml_parser_create(); // Set the functions to handle opening and closing tags xml_set_element_handler($xml_parser, "startElement", "endElement"); // Set the function to handle blocks of character data xml_set_character_data_handler($xml_parser, "characterData"); // print "<hr>\n"; print "<TABLE BORDER=0 WIDTH=0%>\n<TR>\n"; // Open the XML file for reading $fp = fopen("http://www.camelotherald.com/xml/servers.xml","r") or die("Error reading RSS data."); // Read the XML file 4KB at a time while ($data = fread($fp, 4096)) // Parse each 4KB chunk with the XML parser created above xml_parse($xml_parser, $data, feof($fp)) or die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); // Close the XML filef fclose($fp); $cserver->PrintInfo(); $crelic->PrintInfo(); $ckeep->PrintInfo(); print "</TABLE>\n"; // Free up memory used by the XML parser xml_parser_free($xml_parser); // end of file ?> anyone got any idea why it misses one line of xml code? regards patrick -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php