Re: xml and a big script
| From: | Pafo | Date: | Sun, 18 Aug 2002 17:17:40 +0000 |
| Subject: | Re: xml and a big script | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-113143@lists.php.net to get a copy of this message | ||
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" <pafo@pafo.net> skrev i meddelandet
news:20020818171835.98711.qmail@pb1.pair.com...
> 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"_
> VVr;ê\Þ™Ê| MF) 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
>
>