Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP][XML] - Liste (https://www.delphipraxis.net/66099-%5Bphp%5D%5Bxml%5D-liste.html)

Thorben86 24. Mär 2006 18:19


[PHP][XML] - Liste
 
Hi,

ich schreibe gerade an einem Dynamischen Galerie-Modul.

so soll die Galerie über eine PHP-Datei in einer XML Datei gespeichert werden.
Soll heißen, das script geht z.B. den Hauptordner der Galerie durch und zählt die Bilder, und speichert die jeweiligen Namen in einer Liste in einem XML-Dokument.

Nun ist meine frage, ob man Listen in XML-Dateien speichern kann, da es vorkommen kann, dass bilder gelöscht werden, somit müsste man, wenn man die zeilen numeriert, den kompletten rest umschreiben. Daher würde ich eigentlich gerne eine Liste haben, so dass ich einfach den inhalt von zeile x auslesen kann.
Also ähnlich nem memo: liste.lines[2]

Also aussehen müsste es in etwa so:
XML-Code:
<?xml version="1.0" ?>
<anzahl>3</anzahl>
...
<liste>
hallo.jpg
blub.jpg
tut.jpg
</liste>
natürlich könnte ich auch folgendes machen:
XML-Code:
<liste>hallo.jpg;blub.jpg;tut.jpg</liste>
und dann daraus ein Array erstellen, aber das dürfte doch bei vielen bildern recht ineffizient werden, wenn ich dann ein paar elemente da rauslöschen muss, oder?

hab bisher noch nit mit xml gearbeitet und php fang ich eigentlich auch erst an, aber da ich mein Projekt schaffen will, werd ich mich bemühen müssen es schnell lernen

MathiasSimmack 24. Mär 2006 18:34

Re: [PHP][XML] - Liste
 
Zitat:

Zitat von Thorben86
natürlich könnte ich auch folgendes machen:

Oder du hältst dich gleich an die Idee, die hinter XML steht:
XML-Code:
<liste>
  <bild>hallo.jpg</bild>
  <bild>blub.jpg</bild>
  <bild>tut.jpg</bild>
</liste>
Das halte ich für sinnvoller, und das kann man auch mit PHP relativ problemlos auslesen.

Thorben86 24. Mär 2006 18:54

Re: [PHP][XML] - Liste
 
Thx schonmal, das ist ja in dem Sinne einer Liste, wie ich es mir vorgestellt hab gleich.
ich wusste nur nicht, dass ich einen Tag pro section mehrfach verwenden kann...


nur, wie les ich dann die einzelnen Zeilen aus?
ich kann ja nicht wie bei einzeln vorkommenden Tags über den Namen abfragen.
wie spreche ich da z.b. die 2. bildzeile an?

MathiasSimmack 25. Mär 2006 08:04

Re: [PHP][XML] - Liste
 
Das kommt auf den XML-Parser an, den du verwenden willst. Bei CSharp gäbe es bspw. die recht einfache Möglichkeit:
Code:
XmlNodeList bilder = xmldoc.SelectNodes("/liste/bild");
foreach (XmlNode bild in bilder)
{
  Console.WriteLine(bild.OuterXml);
}
zum Anzeigen der einzelnen Knoten. Und wenn man vorher die Anzahl der Elemente prüft, kann man natürlich auch per Index auf ein bestimmtes Bild zugreifen:
Code:
XmlNode bild = bilder[1];
Console.WriteLine(bild.OuterXml);
Wenn du bei PHP auch einen XML-DOM-Parser nimmst, dann kannst du ähnlich wie bei CSharp vorgehen. Bei SAX solltest du die XML-Datei in ein Array parsen lassen, etwa:
Code:
if ($xmlString = file("./bilder.xml.txt"))
{
   $xmlString = implode("", $xmlString);
   if (!empty($xmlString))
   {
      $xmldoc = xml_parser_create();
      xml_parse_into_struct($xmldoc, $xmlString, $vals, $idx);
      xml_parser_free($xmldoc);

      $nodeLevel = 0;
      for ($i = 0; $i < count($vals); $i++)
      {
         if ($vals[$i]["tag"] == "LISTE" && $vals[$i]["type"] == "open")
            $nodeLevel = $vals[$i]["level"] + 1;

         if ($vals[$i]["tag"] == "BILD" && $nodeLevel == $vals[$i]["level"])
         {
            $tmp[] = $vals[$i]["value"];
         }               
      }
   }

   echo "alle Bilder:\n============\n";
   foreach ($tmp as $value) echo "$value\n";

   echo "\n\nBild Nr. 2:\n===========\n";
   echo "$tmp[1]";
}
Das ist nur ein Beispielcode, ohne irgendwelche Absicherungen, usw.

Thorben86 25. Mär 2006 13:01

Re: [PHP][XML] - Liste
 
Auf dem Webspace läuft PHP 5, da ist ja eine XML-Lib drin haben.

Was würdet ihr mir denn empfehlen für den einsatz? Ich benötige es wie gesagt nur, zum abspeichern von ein paar informationen sowie der liste. Zum lesen müsste ich die informationen in Variablen und die Liste in ein Array lesen.

Mehr brauche ich, soweit ich das jetzt sehe nicht.

yankee 26. Mär 2006 05:07

Re: [PHP][XML] - Liste
 
Fuer sowas einfaches wuerde ich den SimpleXML-parser von PHP5 nehmen. Der ist sehr schnell und super einfach zu bedienen:
http://us3.php.net/manual/en/ref.simplexml.php
in deinem Fall:
Code:
$xml =simplexml_load_string(string) oder eben simplexml_load_file(dateiname);
foreach($xml->liste->bild as $bild) print($bild."\n");
Das wurde dir die Liste einfach ausgeben. Kannst du dir dann ja anpassen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz