Simplexml

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Simplexml

    Hallo!

    Ich habe bei mir eine Bildergallerie laufen, deren Pics per XML-Datei geladen werden. Die XML Datei ist wie folgt aufgebaut:

    <?xml version="1.0" encoding="UTF-8"?>
    <menu>
    <gallery name="Familien">
    <image source="bilder/familien/1.jpg" thumb="bilder/familien/1t.jpg" title="Bild 1"/>
    <image source="bilder/familien/2.jpg" thumb="bilder/familien/2t.jpg" title="Bild 2"/>
    <image source="bilder/familien/3.jpg" thumb="bilder/familien/3t.jpg" title="Bild 3"/>
    </gallery>
    <gallery name="Kinder">
    <image source="bilder/kinder/1.jpg" thumb="bilder/kinder/1t.jpg" title="Bild 1"/>
    <image source="bilder/kinder/2.jpg" thumb="bilder/kinder/2t.jpg" title="Bild 2"/>
    <image source="bilder/kinder/3.jpg" thumb="bilder/kinder/3t.jpg" title="Bild 3"/>
    </gallery>
    usw...
    </menu>

    Die Galerie läuft ohne Probleme. Jetzt bin ich dabei ein kleines Tool zu basteln, welches erlaubt die XML-Datei online per Browser zu bearbeiten. Dazu verwende ich SimpleXml:

    PHP-Code:
    <?php
    $file 
    "gallery.xml";
    $savefile "gallery.xml";
    $xml simplexml_load_file($file);
    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>XML-Editor</title>
    </head>

    <body>
    <?php
    if (empty($_POST)) {
    ?>
    <form action="<? echo $_SERVER['PHP_SELF']?>" method="post">
    <?php
    foreach ($xml->gallery->image as $node) {
    $i++;
    $name $node["source"];
    $thumb $node["thumb"];
    $title $node["title"];
    //
    echo "<input name=\"name_$i\" type=\"text\" value=\"$name\" /> \n";
    echo 
    "<input name=\"thumb_$i\" type=\"text\" value=\"$tumb\" /> \n";
    echo 
    "<input name=\"title_$i\" type=\"text\" value=\"$title\" /><br />\n<br />\n";
    }
    ?>
    <input type="submit" name="Submit" value="Speichern" />
    </form>
    </body>
    </html>
    <?php
    } else {
    foreach (
    $_POST as $key => $value) {
    if(
    $key != "Submit") {
    $para explode("_"$key);
    $nr $para[1];
    $name $para[0];
    $xml->gallery[$nr-1]->image[$name] = $value;
    $xml->asXML($savefile);
    }
    }
    echo 
    "Datei unter <strong> $savefile </strong> gespeichert!\n";
    echo 
    "</body>\n";
    echo 
    "</html>";
    }
    ?>
    Jetzt zu meinem Problem... Wenn ich nun das Script im Browser aufrufe werden mir lediglich die ersten drei Zeilen aus der Gallery "Familien" zum Bearbeiten angezeigt. Wie bekomme ich es nun hin, dass das Script dynamisch die weiteren Gallerien in der Datei ausgibt?

    Bin seit heute früh im Netz unterwegs und konnte bisher leider keine Antwort finden. Vielleicht kann mir jemand hier einen Lösungsansatz nennen?

    Gruß, Frank

  • #2
    Hab es gerade mit Xpath lösen können:

    foreach ($xml->xpath('//image') as $node) {

    Leider habe ich jetzt das Problem, wenn ich auf Speichern gehe erscheint folgende Meldung: Fatal error: Objects used as arrays in post/pre increment/decrement must return values by reference in /homepages/23/d160806763/htdocs/datalesen.php5 on line 44

    Das betrifft diese Zeile: $xml->gallery[$nr-1]->image[$name] = $value;

    Vielleicht hat jemand eine Idee?
    Zuletzt geändert von FrankH; 13.11.2006, 12:46.

    Kommentar

    Lädt...
    X