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