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