Ausgelesene XML Daten sortieren

frankmeisner

Grünschnabel
Ich grüße Euch,

ich bin ein absoluter PHP/XML Neuling und habe es immerhin geschafft mit Hilfe der "simplexml_load_file"-Funktion eine im XML-Format vorliegende Mitgliederliste korrekt auszulesen und dazustellen:

PHP:
$xml = simplexml_load_file('mitglieder.xml'); 

echo '<table width="60%"  border="0" cellspacing="0" cellpadding="0">';

foreach ($xml->Info->guild->members->character as $member)

{ 
   
    echo '
  <tr>
    <td>'.$member['name'].'<br>'.'</td>
    <td>'.$member['age'].'<br>'.'</td>
     <td>'.$member['profession'].'<br>'.'</td>
    
   </tr>';
	
}

echo '</table>'

Bisher funktioniert alles fehlerfrei. Im nächsten Schritt möchte ich allerdings die Liste nach Namen sortieren.

Meine google Recherchen haben ergeben, dass ich die Daten möglicherweise in ein Array schreiben muss um sie vernünftig zu sortieren. Leider komme ich trotz diverser Hinweise auf verschiedenen Seiten nicht wirklich weiter.

Ich würde mich freuen wenn ihr mir helfen könntet.

Schönen Gruß
Frank
 
Hallo @frankmeisner

Was ich nicht verstehe ist wieso du die XML Struktur auf eine Tabelle aufbaust, aber das ist jetzt nicht so wichtig.

Deine Internetrecherchen sind richtig ;)
Es wäre sehr zu empfehlen, das zuerst in ein Array zu "stopfen", da man dies einfacher sortieren kann.

Die Funktionen, die du hier brauchst sind:

preg_match_all um die Datensätze in ein Array zu bringen

Anschließend musst du das ganze nochmal in einer for Schleife durchlaufen lassen und als Arraykey den Namen setzen.

Dann das Array nach den keys sortieren mit ksort

Dann gehst nochmal das array durch und schreibst die xml Datei neu.


Grüße Simon
 
Hallo Simon,

erst einmal vielen Dank für Deine schnelle Antwort. Jedoch habe ich das Gefühl, dass die preg_match_all Funktion für normal sterbliche Menschen nicht zu verstehen ist.

Die Funktion würde im ersten Schritt also so aussehen:

PHP:
preg_match_all('[Ausdruck]', $xml, $xmlarray);

Ich habe wirklich keinen blassen Schimmer wie der Ausdruck aussehen könnte.
Ich habe mir über google.de einige Beispiele angeschaut, doch die verwirren mich mehr als das sie mir nützen.

Hast Du evtl. noch einen Tipp bzw. gibt es vielleicht eine einfachere Möglichkeit um die XML Daten auszulesen und zu bearbeiten?

Schönen Gruß
Frank
 
PHP:
$xml = simplexml_load_file('mitglieder.xml');
$members = array();
foreach ($xml->Info->guild->members->character as $member) {
	$members[$member['name']] = $member;
}
ksort($members);

echo '<table width="60%"  border="0" cellspacing="0" cellpadding="0">';
foreach ($members as $member) {
	echo '
  <tr>
    <td>'.htmlspecialchars($member['name']).'</td>
    <td>'.htmlspecialchars($member['age']).'</td>
    <td>'.htmlspecialchars($member['profession']).'</td>
   </tr>';
}
echo '</table>';
 
Hallo Gumbo,

das ging ja verdammt schnell mit Deiner Antwort. Macht auch irgendwie Sinn die XML Daten beim auslesen direkt in ein Array zu packen. Ich habe Hoffnung, dass es auf diese Weise irgendwie geht.

Leider bekomme ich nun eine Fehlermeldung:
Warning: Illegal offset type in /var/www/cn2481017/html/index2.php on line 5

Line 5:
PHP:
    $members[$member['name']] = $member;

Irgendeine Idee woran das liegen könnte?
 
So sieht die XML Datei aus:

Code:
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="/layout/guild-info.xsl"?><page globalSearch="1" lang="de_de" requestUrl="/guild-info.xml">
  <Info>
    <guild>
      <members filterField="" filterValue="" maxPage="1"  page="1">
        <character classId="2" profession="3" genderId="0" age="24" name="Varion" raceId="1" rank="1"/>
        <character classId="9" profession="6" genderId="1" age="19" name="Silenia" raceId="1" rank="1"/>
        <character classId="9" profession="2" genderId="0" age="36" name="Bartol" raceId="7" rank="2"/>
        <character classId="4" profession="6" genderId="0" age="25" name="Serido" raceId="7" rank="2"/>
        <character classId="4" profession="6" genderId="1" age="27" name="Ahlyra" raceId="4" rank="2"/>
        <character classId="5" profession="1" genderId="0" age="28" name="Sepparon" raceId="1" rank="2"/>
        <character classId="1" profession="2" genderId="0" age="700" name="Holas" raceId="1" rank="3"/>
      </members>
    </guild>
  </Info>
</page>
 
Zurück