SEO-Software von Suchmaschinenoptimierung.de

XML auslesen -> Werte sortieren?

(hier klicken, um zum Original Thread zu gelangen)
TrioxX
Guten Morgen,

ich stehe mal wieder vor einem selten dämlichen Problem und langsam gehen mir die Ideen aus.

Nehmen wir an, ich habe eine XML Datei mit folgender Struktur:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="/_layout/roster.xsl"?>
<page globalSearch="1" lang="de_de" requestUrl="/info.xml">
  <tabInfo subTab="Roster" tab="" tabGroup=""/>
  <Info>
    <Header Group="Whatever"></Header>
    <xyz>
      <val Count="2">
        <data var1="1" var2="2" var3="0" var4="32" name="Google"/>
        <data var1="2" var2="3" var3="1" var4="42" name="Yahoo"/>
      </val>
    </xyz>
  </Info>
</page>


Nehmen wir nun an, ich will diese Daten entsprechend auslesen. Das ist ja kein Problem. Aber (und das ist mein Problem) wie muss ich eine Schleife gestalten, um die Ausgabe beispielsweise nach var3 zu sortieren? Oder nach name?

Geht das überhaupt?

Derzeit mache ich das ja so:

php:
1:
2:
3:
4:
5:
<?php foreach ($xml->Info->xyz->val->data as $data)
{
    echo $data['name'];
// usw...
?>


Funktioniert auch problemlos. Aber wie gesagt... Ich würde die Ausgabe gerne sortieren (ASC & DESC) jedoch will ich dafür keine Datenbank benutzen. Weil das wäre ja zu einfach ^^ (Und unnötig...).

EDIT:

Okay, ich hab ne scheinbar nutzvolle Klasse dafür gefunden. Nennt sich arr_multisort.class.php. Ich muss nurnoch damit klar kommen großes Grinsen

EDIT:

Okay, ich bin wohl zu blöd dafür... Ich habe nun probiert, mit der Klasse zu arbeiten:

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
<?php $srt->setArray($xml->Info->xyz->val->data);
$srt->addColumn('val3',SRT_DESC);
$output $srt->sort();

foreach ($output as $data)
{
    echo $data['name'];
// usw...
?>


Egal was ich wähle... Die Sortierung ist immer die Selbe... Das soll mal einer verstehen ôÔ
KrickelD
soweit ich das verstehe willst du die xml-daten sortieren. das ist meiner meinung nach nicht möglich, nur arrays können sortiert werden.

du könntest die xml-daten (als liefernde quelle) in ein array schreiben und dieses dann per multisort (3-zeiler) sortieren.

besser wäre natürlich wenn die xml-schnittstelle die daten direkt richtig sortieren würde
derletztekick
Hi,

wie wohl bekannt ist, bin ich in PHP eher nicht so bewandert, daher weiß ich nicht, ob ich Dir mit folgendem wirklich helfen kann. Mit ähnlichen Problemen hatte ich auch bei JavaScripten bereits zu tun. Hier gibt es, ähnlich wie in PHP auch, eine sortier-Funktion sort. Ist man nun in der "misslichen" Lage nicht nur primitive Datentypen sondern (komplexere) Objekte zu sortieren, ist dies trotzdem mit dieser Funktion möglich, da man sort() eine Vergleichsfunktion mit übergeben kann, nach der sortiert werden soll.
Bei einem Vergleich zweier Objeke wird sich in keiner Sprache etwas wie: Obj1 > Obj2 formulieren lassen, sondern nur ein Vergleich von Eigenschaften ist denkbar: Obj1.eigenschaft > Obj2.eigenschaft. Genau dieser Vergleich kann in JS in der übergebenen Vergleichsfunktion definiert werden, sodass auch Objekte sortiert werden können. Umgesetzt habe ich das zB bei meinem Fußballmanager, um die aktuelle Tabelle sortiert auszugeben.


Gruß Micha
TrioxX
Ich habs geschafft großes Grinsen Was mir nicht einfiel ist, dass ich den Strukturbaum bis zur auszulesenden Ebene erstmal seperieren und dann die Elemente in ein Array werfen muss.

Um die Elemente in ein Array zu bekommen, benutze ich diese nette Funktion "convertXMLtoArray".

Danach muss ich arr_multisort nurnoch mit dem Array füttern und schon kann ich die Ausgabe sortieren.

Danke euch beiden Augenzwinkern
KrickelD
haben wir doch gesagt - nur anders ausgedrückt smile danke für die rückmeldung
(hier klicken, um zum Original Thread zu gelangen)



Tipp: Ranking-Konzept.de - Das SEO-Forum (Forum rund um die Suchmaschinenoptimierung) der artaxo AG.
Das große Versicherungs ABC von Versicherung.de - mit allen Aspekten der Computerversicherungen!
Fan-Foren.de, die große Community mit Musikforum ist ab sofort online.