ERLEDIGT
JA
JA
ANTWORTEN
8
8
ZUGRIFFE
682
682
EMPFEHLEN
-
Hallo,
ich habe ein XMLfile folgender Art:
Code :1 2 3
<markers> <marker entry="149" eintrag="2009-10-10 16:35:52" ... /> <markers>
Jetzt möchte ich die "neusten" 5 Einträge darstellen. Folgenden Code habe ich bisher:Ich steh gerade auf dem Schlauch und weiss nicht so recht, die ich die Abfrage der 5 neusten Einträge gestallten kann.PHP-Code:$xml = simplexml_load_file("data.xml");
for($i = 0; $i < 5; $i++)
{
$att = $xml->marker[$i]->attributes();
echo $att['entry'];
}
Jemand eine idee?
-
26.10.09 20:29 #2
Auch wenn du es in eine andere Variable speicherst, bleibt es ein Objekt und wird nicht zu einem Array.
PHP-Code:<?php
$str = '<markers>
<marker entry="149" eintrag="2009-10-10 16:35:52" />
<marker entry="151" eintrag="2009-10-10 16:35:52"/>
<marker entry="152" eintrag="2009-10-10 16:35:52"/>
<marker entry="153" eintrag="2009-10-10 16:35:52"/>
<marker entry="154" eintrag="2009-10-10 16:35:52"/>
</markers>';
$xml = simplexml_load_string($str);
for($i = 0; $i < 5; $i++)
{
$attributes = $xml->marker[$i]->attributes();
echo $attributes->entry.'<br/>';
}
?>KIDS Kinderbetreuungsdienst
Xing
"When you play the game of thrones, you win or you die. There is no middle ground."
by Cersei Lannister in "A Game Of Thrones"
-
Funktioniert hatte es trotzdem, aber danke.
Wie kann ich denn jetzt am einfachsten die 5 neusten rausziehen?
-
Hi!
Das Zauberwort heißt usort(). Ich glaube der einfachste Weg ist das gesamte Array $xml->marker zu durchlaufen und mal eben usort() 'drüber zu jagen, allerdings wirst Du die Funktion zum Vergleichen selber basteln müssen:Code PHP: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
<?php $str = <<<EOT <markers> <marker entry="149" eintrag="2007-10-10 16:35:52"/> <marker entry="151" eintrag="2009-10-10 16:35:00"/> <marker entry="152" eintrag="2009-10-10 16:30:52"/> <marker entry="153" eintrag="2003-11-10 15:35:52"/> <marker entry="154" eintrag="2009-10-10 16:35:52"/> <marker entry="149" eintrag="2007-10-10 16:35:52"/> <marker entry="151" eintrag="2009-10-10 16:33:00"/> <marker entry="152" eintrag="2007-10-10 16:30:52"/> <marker entry="153" eintrag="2009-11-10 16:35:52"/> <marker entry="154" eintrag="2004-10-10 16:35:52"/> </markers> EOT; $xml = simplexml_load_string($str); function sort_callback($a, $b) { if($a->eintrag == $b->eintrag) { return 0; } $a = strtotime($a->eintrag); $b = strtotime($b->eintrag); return $a > $b? 1: -1; } for($i=count($xml->marker); $i;) { $data[] = $xml->marker[--$i]->attributes(); } unset($xml); usort($data, sort_callback); for($i=0; $i!=5; ++$i) { echo $data[$i]->eintrag, ": ", $data[$i]->entry, "\n"; }
Ach ja, die Schleife in den Zeilen 33 bis 35 hat nicht nur den Zweck die Attribute schon vorher zu extrahieren (was einen Performance-Gewinn sein müsste), sondern auch ein Problem im SimpleXMLElement zu umgehen: Das Array $xml->marker würde von usort() zwar sortiert werden, allerdings wäre nach der Operation die Sortierung wieder verloren. Die Ursache kann man sich ausmalen...
Gruß
Enum
[EDIT]
Ok, usort() basiert nicht (mehr?) auf Quicksort.Geändert von Enumerator (27.10.09 um 12:26 Uhr)
-
Danke. Irgendwie klappt das mit folgendem XML nicht.
,Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
<markers> <marker entry="149" eintrag="2009-10-10 16:35:52" /> <marker entry="150" eintrag="2009-10-11 13:09:07" /> <marker entry="151" eintrag="2009-10-11 13:35:02" /> <marker entry="152" eintrag="2009-10-13 20:01:50" /> <marker entry="153" eintrag="2009-10-21 15:50:59" /> <marker entry="154" eintrag="2009-10-21 15:53:39" /> <marker entry="155" eintrag="2009-10-21 16:01:23" /> <marker entry="156" eintrag="2009-10-21 16:10:30"/> <marker entry="157" eintrag="2009-10-21 16:17:30"/> <marker entry="158" eintrag="2009-10-21 16:18:30"/> <marker entry="159" eintrag="2009-10-21 16:19:30"/> </markers>
Er kommt dabei mit den gleichen tagen nicht klar. Hm..Geändert von webbudda (28.10.09 um 18:42 Uhr)
-
Moin,
hast du evtl. libxslt verfügbar?
Das, was du so mit dem XML vorhast, schreit geradezu nach XSL!
-
Keine Ahnung. Der Kram liegt bei Strato.
Kann man das o.g. Beispiel nicht etwas modifizieren?
-
Bei mir spuckt er da Folgendes aus:
Wenn ich nicht allzu müde bin, ist das doch vollkommen richtig, oderCode :1 2 3 4 5
2009-10-10 16:35:52: 149 2009-10-11 13:09:07: 150 2009-10-11 13:35:02: 151 2009-10-13 20:01:50: 152 2009-10-21 15:50:59: 153
Natürlich sind das die Ältesten Einträge. Um auf die jüngsten zu kommen, kannst Du entweder dir Rückgabewerte von sort_callback vertauschen oder $data von hinten an den Kragen gehen...
Gruß
Enum
PS:
Wenn das XML immer so aussieht wie oben, sprich wenn die jüngsten Einträge ganz unten und die ältesten ganz oben sind, würde ich auf eine Sortierung vollkommen verzichten und stattdessen mit dem XML-Baum arbeiten:PHP-Code:$str = '<markers>
<marker entry="149" eintrag="2009-10-10 16:35:52" />
<marker entry="150" eintrag="2009-10-11 13:09:07" />
<marker entry="151" eintrag="2009-10-11 13:35:02" />
<marker entry="152" eintrag="2009-10-13 20:01:50" />
<marker entry="153" eintrag="2009-10-21 15:50:59" />
<marker entry="154" eintrag="2009-10-21 15:53:39" />
<marker entry="155" eintrag="2009-10-21 16:01:23" />
<marker entry="156" eintrag="2009-10-21 16:10:30"/>
<marker entry="157" eintrag="2009-10-21 16:17:30"/>
<marker entry="158" eintrag="2009-10-21 16:18:30"/>
<marker entry="159" eintrag="2009-10-21 16:19:30"/>
</markers>';
$xml = simplexml_load_string($str);
for($i=count($xml->marker), $j=$i-5; $j!=$i; --$i)
{
$attributes = $xml->marker[$i]->attributes();
echo $attributes->entry.'<br/>';
}
Geändert von Enumerator (28.10.09 um 19:08 Uhr)
-
Ähnliche Themen
-
Ordner nach XML durchsuchen und einlesen mit SimpleXML
Von Cluster im Forum PHPAntworten: 11Letzter Beitrag: 04.09.09, 17:36 -
SimpleXML
Von PHPGuru86 im Forum PHPAntworten: 2Letzter Beitrag: 31.03.09, 21:56 -
(SimpleXML)
Von Sarah im Forum PHPAntworten: 4Letzter Beitrag: 11.02.08, 10:08 -
PHP & SimpleXML
Von PersonalDemon im Forum PHPAntworten: 5Letzter Beitrag: 04.10.07, 14:36 -
SimpleXML und DTD
Von bandsite im Forum PHPAntworten: 1Letzter Beitrag: 03.08.06, 20:49





Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren