aog Skrevet 20. mars 2004 Del Skrevet 20. mars 2004 Hei. Jeg har er et script som henter ut data fra denne XML filen. Det jeg lurte på er om det går ann å legge inn en funksjon, der du kan velge om den skal sortere etter rank_name, nickname, profession, eller level. Slik den er nå, så sortere den etter rank. Høyest rank først. Det kommer nok av at det er slik det blir vist i xml filen. Slik ser php filen ut.. ...noen som har en ide? <?php # navn på member tag: $delimiter_tag = "member"; # source url $url = "http://www.anarchy-online.com/org/stats/d/1/name/6223873/basicstats.xml"; # henter ned xml if(!($fh = @fopen($url,'r'))){ die("fikk ikke åpnet url: <a href=\"$url\">$url</a>"); } # initialiserer vår parser $xml_parser = xml_parser_create(); # og tilordner funksjoner for å ta seg av ting og tang xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_character_data_handler($xml_parser, "characterData"); # her skal vi samle opp alle våre data $character_data = array(); # midliertidig oppsamlingsarray $current_character = array(); # bruker en signal variable for å angi når vi er inne i en <member> tag $in_delimiter_tag = 0; # bruker upper string i XML parsing (hvorfor det????) $delimiter_tag = strtoupper($delimiter_tag); # søker gjennom xml documentet while($data = fread($fh, 4096)){ if(!xml_parse($xml_parser,$data,feof($fh))){ die(sprintf("XML error: %s på linje %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } xml_parser_free($xml_parser); # dumper data for å vise hva vi har funnet: if(isset($_GET['dump'])){ echo "<pre>"; print_r($character_data); echo "</pre>"; exit; } # heading echo "<h1>HOuse Maadiah</h1><h2>Number of members: "; echo count($character_data); echo "</h2><h3>Avg. level: "; # finner gjennomsnitt if(count($character_data)){ foreach($character_data as $character){ $snitt += $character['LEVEL']/count($character_data); } } $snitt = round($snitt); echo "$snitt</h3>\n"; # teller for å sette bakgrunnsfarge $counter = 0; foreach($character_data as $character){ if($i=1-$i) echo '<hr style="visibility: hidden; margin: 0; border: 0; clear: both;" />' . "\n"; # character div echo '<div style="background-color: ' . ( in_array(++$counter % 4, array(3,0) ) ? '#efefef' : '#cccccc' ) . '; padding: 1em; float: left; width: 380px; overflow: hidden;">' . "\n"; # navn echo '<h2 style="margin-top: 0;">'; echo $character['FIRSTNAME'] . ' <span style="text-decoration: underline;">' . $character['NICKNAME']; echo '</span> ' . $character['LASTNAME'] . "</h2>\n"; # bilde echo '<img src="' . $character['SMALLPHOTO_URL'] . '" alt="' . $character['NICKNAME'] . '" style='; echo '"float: left; margin: 1em; border: 1px solid #333333;"/>' . "\n"; # resten echo '<div style="clear: left;">' . "\n"; echo '<strong>Rank:</strong> ' . $character['RANK_NAME'] . "<br/>\n"; echo '<strong>Level:</strong> ' . $character['LEVEL'] . "<br/>\n"; echo '<strong>Profession:</strong> ' . $character['PROFESSION'] . "<br/>\n"; echo '<strong>Gender:</strong> ' . $character['GENDER'] . "<br/>\n"; echo '<strong>Breed:</strong> ' . $character['BREED'] . "<br/>\n"; echo "</div>\n</div>\n\n"; } # husk at funksjoner har lokalt "name space", må bruke global for å få tilgang # til andre variable. function startElement($xml_parser,$name,$attrs){ global $current_element,$delimiter_tag,$in_delimiter_tag; # hvis vi er innenfor en <member> tag, skal vi huske på dette tag-navnet if($in_delimiter_tag and $name != $delimiter_tag){ $current_element = $name; } # eller hvis dette er en <member> tag, så sier vi fra at vi har gått inn i en <member> tag else if($name == $delimiter_tag){ $in_delimiter_tag = 1; $current_element = ""; } # hvis ikke, skal vi bare glemme denne tagen else{ $current_element = ""; } } function endElement($xml_parser,$name){ global $character_data,$delimiter_tag,$current_character; # ved en /tag, skal vi uansett ikke ha noe i denne variabelen $current_element = ""; # hvis vi dessuten har gått ut av en </member> tag, skal vi oppdatere lista med # characteren funnet og gjøre klar for ny character if($name == $delimiter_tag){ # legger til denne charactern i lista $character_data[] = $current_character; # tømmer oppsamlingslista $current_character = array(); # og sier fra at vi ikke lenger er i en character tag $in_delimiter_tag = 0; } } function characterData($xml_parser, $data){ global $current_element,$current_character; # lagrer data funnet if($current_element){ # må bruke trim fordi parsern tar med alt av linjeskifter og blanks $current_character{$current_element} .= trim($data); } } ?> Lenke til kommentar
aog Skrevet 21. mars 2004 Forfatter Del Skrevet 21. mars 2004 (endret) hmmm.... ser ikke ut til at noen har noen tips eller meninger om dette... ..det jeg lurer på da, er om det i heletatt er mulig? Bare en søkefunkjson hadde vert ok også.. Endret 21. mars 2004 av aog Lenke til kommentar
???????? Skrevet 21. mars 2004 Del Skrevet 21. mars 2004 Ta en var_dump på arrayen $character_data. Så bruker du arrayfunksjonene til å snu på den. Lenke til kommentar
aog Skrevet 21. mars 2004 Forfatter Del Skrevet 21. mars 2004 er veldig ny i php. kunne du vist litt mer hva du mener? Lenke til kommentar
???????? Skrevet 22. mars 2004 Del Skrevet 22. mars 2004 Scriptet ditt er litt for langt for at jeg har lyst til å sette meg inn i det, så skriv var_dump($character_data) så får du opp en liste med array'ene den inneholder. Så kan du eventuelt sortere ut fra den. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå