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

Reply via email to