Daten aus einer Zeile in Variablen zuweisen

XPaPa

Grünschnabel
Also ich möchte einen xml_parser für DAoC schreiben welcher mit einer nicht ganz xml-konformen (sagen meine netten bücher) umgehen kann.

klar ist erstmal das man mit xml_parser_create() das objekt öffnen kann und die einzelnen Datensätze mit xml_set_element_handler extrahieren kann. Nun aber zu meinem Problem:

eine Zeile sieht ca. so aus:
<character id="530153" name="Xarius" laston="Recently" race="11" class="53" level="50" guildrank="1" totalrp="505345" lastweekrp="83791" housing="" anon="1"/>

startpunkt wäre "<character" und endpunkt "/>"

Jetzt möchte ich alle werte in dieser Zeile einfach in variablen übernehmen. Aber leider finde ich dazu nix schönes ;)

Bis jetzt zerlege ich dies mit folgenden script:
Code:
   if($xml=fopen("http://camelot-europe.goa.com/herald/servers/Dartmoor/guilds/1614.xml","r")){
while($zeilen=fgets($xml))
     {
     $data = split(" ",$zeilen);
     if($data[0]=="<character"){
   	$zeile = split("character",$zeilen);
   	foreach($zeile AS $einezeile){
   	$daten = split("\"",$einezeile);
   	$i++;
   	$chars[$i][lwrp]=$daten[17];
   	$chars[$i][name]=$daten[3];
   	$chars[$i][totalrp]=$daten[15];
   //	print_r($zeile);
   	}
      }
     }
    }
wobei ich a) nicht die XML Funktionen von PHP nutze (gefällt mir nicht da nicht sauber) und b) bei einer änderung immer und immer wieder nacharbeiten muss obwohl es mit Variablen nicht nötig wäre.
 
Die Variablen aus einer Zeile bekommst Du so raus:
PHP:
// erst mal die Begrenzer weg
$line = substr(str_replace("<character ", "", $einezeile), 0, -2);

// dann die Pärchen in ein Array
$arrLine=explode(" ", $line);
foreach($arrLine as $val){
  // Als Varnamen nehmen wir den vor dem =
  $key = substr($val, 0, strrpos($val, "="));
  // und als Wert das nach dem =, aber ohne "
  $v = str_replace("\"", "", strstr($val, "="));
  // hier wird die Variable mit gewünschtem Namen und Wert erzeugt
  $$key = $v;
}
Gut möglich, dass es einen einfacheren und eleganteren Weg gibt.
Ausserdem werden bei mehreren Zeilen die letzten Variablen immer überschrieben, da sie ja die gleichen Namen haben ...
 
Zurück