tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
293
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Michael Brauner Michael Brauner ist offline Mitglied Bronze
    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
     

  2. #2
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    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 ;-)

  3. #3
    Michael Brauner Michael Brauner ist offline Mitglied Bronze
    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
     

  4. #4
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    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 ;-)

  5. #5
    Michael Brauner Michael Brauner ist offline Mitglied Bronze
    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

    $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);
    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 was ja nicht gerade sinnvoll ist .

    LG Mike
     

  6. #6
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    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 ;-)

  7. #7
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    geht sicher auch 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); 
    Nachtrag: Das von saftmeister ist eleganter....
     
    ---------------------------------------------------------------------------------------------------
    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

  8. #8
    Avatar von hela
    hela hela ist offline Mitglied Smaragd
    tutorials.de Premium-User
    Registriert seit
    Oct 2004
    Beiträge
    1.123
    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

  1. Antworten: 2
    Letzter Beitrag: 15.02.06, 15:24
  2. bei suchmaschine ganz oben
    Von xiper im Forum HTML & XHTML
    Antworten: 2
    Letzter Beitrag: 05.12.05, 15:40
  3. Fenster im ganz oben
    Von der_maiki im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 22.07.04, 20:14
  4. Tabelle ganz nach oben
    Von Der O im Forum HTML-Editoren
    Antworten: 4
    Letzter Beitrag: 24.06.03, 15:52
  5. Antworten: 6
    Letzter Beitrag: 30.08.02, 19:39

Stichworte