ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
750
750
EMPFEHLEN
-
24.09.05 17:48 #1
- Registriert seit
- Feb 2005
- Beiträge
- 20
Als erstes ich hab so gut wie kein Plan von PHP.
Hab so ziemlich alles gelesen was hier zu XML zu finden ist, komme jetzt aber nicht mehr weiter.
Ich habe ein Verzeichnis auf dem Server in dem sich die XML Dateien befinden. Aus diesen XML Dateien benötige ich jedoch nur einzelne Einträge. Es würde mir reichen diese in ein Array zu schreiben und dann als Website ausgeben zu können.
Soweit so gut.
Ich hab es mit dem Code probiert:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
<?php [color=red]$file = "1127518465.xml";[/color] $xml_parser = xml_parser_create(); if (!($fp = fopen($file, "r"))) { die("could not open XML input"); } $data = fread($fp, filesize($file)); fclose($fp); xml_parse_into_struct($xml_parser, $data, $vals, $index); xml_parser_free($xml_parser); $params = array(); $level = array(); foreach ($vals as $xml_elem) { if ($xml_elem['type'] == 'open') { if (array_key_exists('attributes',$xml_elem)) { list($level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']); } else { $level[$xml_elem['level']] = $xml_elem['tag']; } } if ($xml_elem['type'] == 'complete') { $start_level = 1; $php_stmt = '$params'; while($start_level < $xml_elem['level']) { $php_stmt .= '[$level['.$start_level.']]'; $start_level++; } $php_stmt .= '[$xml_elem[\'tag\']] = $xml_elem[\'value\'];'; eval($php_stmt); } } echo "<pre>"; print_r ($params); print_r ($level); echo "</pre>"; ?>php
Funktioniert auch soweit. Nur ich habe in der XML Datei jedoch mehrere Einträge von folgendem:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
<Players> [color=darkorange]<Player> <ID>31</ID> <Team>0</Team> <Name>blabla</Name> <Score>0</Score> <Kills>0</Kills> <Deaths>0</Deaths> <TOP>0</TOP> <Ping>1542</Ping> <PL>0</PL> <Time>1</Time> <IP>0.0.0.0</IP> <Damage> </Damage> </Player>[/color] [color=green]<Player> <ID>1</ID> <Team>0</Team> <Name>blabla</Name> <Score>0</Score> <Kills>0</Kills> <Deaths>0</Deaths> <TOP>0</TOP> <Ping>1542</Ping> <PL>0</PL> <Time>1</Time> <IP>0.0.0.0</IP> <Damage> </Damage> </Player>[/color]
Diese Blöcke wiederholen sich halt bei mehreren Spielern. Die Ausgabe zeigt jedoch nur einen Eintrag.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
[PLAYERS] => Array[indent]([indent][PLAYER] => Array ([indent][ID] => 1 [TEAM] => 1 [NAME] => test [SCORE] => 0 [KILLS] => 18 [DEATHS] => 3 [TOP] => 0 [PING] => 57 [PL] => 0 [TIME] => 5 [IP] => 0.0.0.0 [DAMAGE] => [/indent]) [/indent][/indent])
Wie bekomme ich jetzt die anderen Player auch noch in die Ausgabe bzw. in das Array?
Wie kann ich alle Dateien, die sich in dem Verzeichnis befinden, auf einmal auslesen?
- siehe rot markierte Stelle -
Vielleicht hat ja jemand einen Codeschnippsel für mich.
-
24.09.05 22:38 #2
- Registriert seit
- Feb 2005
- Beiträge
- 20
Ok, hat sich soweit erledigt, habs irgendwie hingebastelt bekommen.
Sogar auch das mit den Dateinamen und dem auslesen.
hier meine Lösung
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
$file = $dateinamen[$x]; echo "Dieses ist der" . $x . ". Durchlauf ". $dateinamen[$x] . "<br>"; $xml_parser = xml_parser_create(); if (!($fp = fopen($file, "r"))) { die("could not open XML input"); } $data = fread($fp, filesize($file)); fclose($fp); $p = xml_parser_create(); xml_parser_set_option($p, XML_OPTION_CASE_FOLDING, 0); xml_parser_set_option($p, XML_OPTION_SKIP_WHITE, 1); xml_parse_into_struct($p, $data, $values, $idx); xml_parser_free($p); // tracking used keys $usedKeys = array(); $deepLevel = -1; // start a php array string (evaluated later) $forEvalPrefix = '$xml_array'; // loop throught the value array foreach ($values as $key => $val) { $tagName = $val['tag']; // pass the key tag into a more friendly looking variable $level = $val['level']; // idem if($val['type'] == 'open') { $deepLevel++; // increase deep level $forEvalPrefix .= '[\''. $tagName .'\']'; // begin used keys checks to allow multidimensionatity under the same tag (isset($usedKeys[$level][$tagName])) ? $usedKeys[$level][$tagName]++ : $usedKeys[$level][$tagName] = 0; $forEvalPrefix .= '['. $usedKeys[$level][$tagName] .']'; } if($val['type'] == 'complete') { ($level > $deepLevel) ? $deepLevel++ : ''; // increase $deepLevel only if current level is bigger $tagValue = addslashes($val['value'] ); // format the value for evaluation as a string $forEvalSuffix = '[\''. $tagName .'\'] = \''. $tagValue .'\';'; // create a string to append to the current prefix $forEval = $forEvalPrefix . $forEvalSuffix; // (without "$php_used_prefix"...) eval($forEval); // write the string to the array structure } if($val['type'] == 'close') { unset($usedKeys[$deepLevel]); // Suppress tagname's keys useless $deepLevel--; $forEvalPrefix = substr($forEvalPrefix, 0, strrpos($forEvalPrefix, '[')); // cut off the used keys node $forEvalPrefix = substr($forEvalPrefix, 0, strrpos($forEvalPrefix, '[')); // cut off the end level of the array string prefix } }
Also hat sich erledigt....
Ähnliche Themen
-
In Dateien schreiben und Dateien auslesen (z.B. User + Pwd)
Von NeoHeadquarter im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 09.05.06, 13:44 -
Mehrere XML Dateien in ein Flash Drop Down Menü auslesen und in Textfeld auszugeben
Von fasch im Forum Flash PlattformAntworten: 18Letzter Beitrag: 28.06.05, 00:53 -
Mehrere Dateien auslesen und den Inhlat teilweise anzeigen
Von daylon im Forum PHPAntworten: 7Letzter Beitrag: 08.03.05, 19:44 -
Kontroverse: mehrere Dateien oder mehrere Funktionen?!
Von ludz im Forum PHPAntworten: 1Letzter Beitrag: 23.06.03, 16:09 -
[C++]mehrere Dateien
Von Piesbruhder im Forum C/C++Antworten: 4Letzter Beitrag: 24.11.02, 17:13





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren