ERLEDIGT
NEIN
NEIN
ANTWORTEN
7
7
ZUGRIFFE
293
293
EMPFEHLEN
-
21.06.11 21:35 #1
- Registriert seit
- Feb 2011
- Beiträge
- 27
Hallo Leute,
ich möchte eine Tracklist für einen Flashplayer erstellen,
jeder neue Eintrag soll an den Anfang der Tracklist geschrieben werden.
Leider schreibt SimpleXML die Eintrage immer an den Schluss.
Gibt es da eine Möglichkeit, dem Skript zu sagen, dass das an den Anfang gehört ?
Code :1 2 3 4 5 6 7 8
$xml = simplexml_load_file("playlist.xml"); $bericht = $xml->trackList[0]->addChild('track'); $bericht->addChild("location", "26.mp3"); $bericht->addChild("title", "Testi-Testi"); $handle = fopen("playlist.xml", "wb"); fwrite($handle, $xml->asXML()); fclose($handle);
Danke im Vorraus.
Liebe Grüße
Mike
-
22.06.11 08:32 #2
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.520
Kannst du bitte eine Beispiel-XML posten und mitteilen, in welcher Reihenfolge du das gern hättest?
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
22.06.11 09:52 #3
- Registriert seit
- Feb 2011
- Beiträge
- 27
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
<?xml version="1.0" encoding="UTF-8"?> <playlist xmlns="http://xspf.org/ns/0/" version="1"> <title>Ounage Playlist</title> <creator>Dew</creator> <link>http://www.blup.fr/</link> <info>The Best Playlist</info> <trackList> <track> <location>readings/10.mp3</location> <title>Der See - Artkor</title> </track> </tracklist> </playlist>
Die Einträge werden nun mit meinem bisherigem Script als weiterer Track unter den bestehenden geschrieben. Ich möchte aber, dass der neue Eintrag immer als erster Track eingeschrieben wird.
Danke für die Antwort.
LG Michael
-
22.06.11 09:57 #4
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.520
Die Playlist wird also von einem anderen Tool zusammen gestellt und gespeichert. Das bedeutet, das SimpleXML da überhaupt nix für kann. Du kannst es lediglich so machen, das du mit SimpleXML-Objekt aus der trackList ein Array machst, dieses entweder von hinten nach vorn durchläufst oder mit array_reverse() umdrehst.
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
22.06.11 10:05 #5
- Registriert seit
- Feb 2011
- Beiträge
- 27
Die Playlist wird nicht von einem anderen Programm erstellt.
Die Playlist erweitere ich per PHP wenn meine User die Tracks hochladen.
Die Playlist wird von einem anderen Programm (Dewplayer - Flash) abgespielt.
An der Art und Weise, wie Dewplayer die Playlist liest, kann ich nichts verändern.
Deshalb muss ich die neuen Tracks so einschreiben, dass es gleich richtige gelesen wird.
Das Script
das funktioniert super. Nur ist der Eintrag immer unten und wird vom Player auch ans Ende der Playlist gelesen. Ich möchte aber, dass die neuen Einträge oben stehen. Sonst sehen die User immer den ältesten Eintrag$xml = simplexml_load_file("playlist.xml");
$bericht = $xml->trackList[0]->addChild('track');
$bericht->addChild("location", "26.mp3");
$bericht->addChild("title", "Testi-Testi");
$handle = fopen("playlist.xml", "wb");
fwrite($handle, $xml->asXML());
fclose($handle);
was ja nicht gerade sinnvoll ist
.
LG Mike
-
22.06.11 10:17 #6
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.520
Ich habe nun verstanden. Ich weiß nicht, obs dich weiter bringt, aber ich hab das Codesnippet hier gefunden:
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
class SimpleXMLElementEx extends SimpleXMLElement { public function insertChildFirst($name, $value, $namespace) { // Convert ourselves to DOM. $targetDom = dom_import_simplexml($this); // Check for children $hasChildren = $targetDom->hasChildNodes(); // Create the new childnode. $newNode = $this->addChild($name, $value, $namespace); // Put in the first position. if ($hasChildren) { $newNodeDom = $targetDom->ownerDocument->importNode(dom_import_simplexml($newNode), true); $targetDom->insertBefore($newNodeDom, $targetDom->firstChild); } // Return the new node. return $newNode; } }
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
geht sicher auch eleganter
Nachtrag: Das von saftmeister ist eleganter....PHP-Code:$xml = simplexml_load_string($string);
//Tracks extrahieren
$tracks = array();
foreach($xml->trackList->children() as $track){
//Tracks in ein Array wandeln
$tracks[] = (array) $track;
}
//Tracks im XML löschen
unset($xml->trackList->track);
//Neuer Track an den Anfang setzen
array_unshift($tracks, array('location' => '26.mp3', 'title' => 'Testi-Testi'));
//Alle Tracks des Arrays dem XML wieder anfügen
foreach($tracks as $tag => $track){
$chield = $xml->trackList->addChild('track');
$chield->addChild('location', $track['location']);
$chield->addChild('title', $track['title']);
}
var_dump($xml);
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Hallo,
ich würde es gleich alles im DOM bearbeiten, da gibt es die insertBefore-Methode in der DOMNode-Klasse. Der Codesnippet in Saftmeisters Beitrag verwendet sie auch:
PHP-Code:$xml = new DOMDocument();
$xml->load('playlist.xml');
$trackList = $xml->getElementsByTagName('trackList')->item(0);
$newTrack = $xml->createElement('track');
// Gibt es Kindknoten in der Trackliste?
if($trackList->hasChildNodes())
{
$firstTrack = $trackList->firstChild;
$trackList->insertBefore($newTrack,$firstTrack);
} else {
$trackList->appendChild($newTrack);
}
$firstTrack = $trackList->firstChild;
$bericht = $xml->createElement('location','26.mp3');
$firstTrack->appendChild($bericht);
$bericht = $xml->createElement('title','Testi-Testi');
$firstTrack->appendChild($bericht);
header("Content-Type: text/xml");
echo $xml->saveXML();
Ähnliche Themen
-
teamplates/inhalt so auslesen, dass letzer eintrag/template auf 1 seite ganz oben ist
Von -GS-Master im Forum PHPAntworten: 2Letzter Beitrag: 15.02.06, 15:24 -
bei suchmaschine ganz oben
Von xiper im Forum HTML & XHTMLAntworten: 2Letzter Beitrag: 05.12.05, 15:40 -
Fenster im ganz oben
Von der_maiki im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 22.07.04, 20:14 -
Tabelle ganz nach oben
Von Der O im Forum HTML-EditorenAntworten: 4Letzter Beitrag: 24.06.03, 15:52 -
Neu Eintrag wird angehangen soll aber nach ganz oben. MYSQL Problem.
Von masta im Forum PHPAntworten: 6Letzter Beitrag: 30.08.02, 19:39





Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren