this line is only for debugging: print $val
located within these tags in startElement

  case "NAME": $da_relicname=$val;print $val;break;
  case "TYPE": $da_relictype=$val;break;


"Pafo" <[EMAIL PROTECTED]> skrev i meddelandet
[EMAIL PROTECTED]">news:[EMAIL PROTECTED]...
> 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