Frauke: Wie macht man richtig XML aus SQL ?

Guten Morgen,
Meine bisherige Erfahrungen in MySql bzw PHP
erstrecken sich nur auf das Abfragen einer einzelnen Tabelle
in einer Datenbank.

Nun möchte ich gerne ein XML Dokument nach folgendem Schema erstellen:
Ich gehe davon aus , daß hier zwei SQL-Tabellen notwendig sind, oder?
Also pro Projekt gibt es immer einen Namen und ein Text, aber es sind beliebig viele Bilder mit Bildunterschriften möglich.

<?xml version="1.0 ?>
<inhalt>
  <projekt>
    <name>ueberschrift1</name>
    <text>Hier steht Text1</text>
    <bilder>
      <news bildURL="bild1.jpg">Bildunterschrift Bild1</news>
      <news bildURL="bild2.jpg">Bildunterschrift Bild2</news>
    </bilder>
  </projekt>
  <projekt>
    <name>ueberschrift2</name>
    <text>Hier steht Text2</text>
    <bilder>
      <news bildURL="bild3.jpg">Bildunterschrift Bild3</news>
      <news bildURL="bild4.jpg">Bildunterschrift Bild4</news>
      <news bildURL="bild5.jpg">Bildunterschrift Bild5</news>
      <news bildURL="bild6.jpg">Bildunterschrift Bild6</news>
      <news bildURL="bild7.jpg">Bildunterschrift Bild7</news>
    </bilder>
  </projekt>
</inhalt>

Meine 2 SQL-Tabellen würde ich folgendermaßen gestalten:

Tabelle 1:
ID , Ueberschrift , Text

Tabelle 2:
gehoertZuID , bildURL , Bildunterschrift

____________________________________________________
Hier meine Fragen:

Wie liest man die zwei Tabellen aus, damit sich die oben genannte
Struktur ergibt. Gibt es hier einen MySql-Befehl, der das
Verknüpfen der Tabellen übernimmt, oder muß man Zeilenweise Tabelle 1 Abfragen und dann mit WHERE in Tabelle 2 die passenden "gehoertZuID"
auslesen?

Bin ich bisher überhaupt auf dem richtigen Weg , oder geht man so ein Problem ganz anders an?

Kennt vielleicht jemand einen Link oder ein Tutorial, der sich mit dem Thema befasst?

Vielen Dank für Eure Hilfe
Frauke

  1. Sup!

    Mach einfach, das passt schon. Warum sollte es für sowas einen Extra-Befehl geben?

    Gruesse,

    Bio

    --
    Keep your friends close, but your enemies closer!
  2. Es gibt schon einige XML Prozessoren, die als Lib für PHP verfügbar sind. Die sind aber eher für den umgekehrten Weg gedacht (parsen von XML Files). Bisher habe ich damit nur gute Erfahrungen gemacht.

    Ich erstelle für gewöhnlich alle XML Files auch manuell (SQL auslesen -> Schleifen/Struktur -> File schreiben). Meist in Verbindung mit Cronjobs..

    Also Du bist schon richtig unterwegs. Achte nur auf das File Format unter dem Du das File dann speicherst (UTF8 etc.). Das ist ein Stolperstein an dem ich schon mal nen Tag verbracht hab :o)

    LG
    Mike

    1. Danke und Gruß
      Frauke

    2. Hallo,

      Also Du bist schon richtig unterwegs. Achte nur auf das File Format unter dem Du das File dann speicherst (UTF8 etc.). Das ist ein Stolperstein an dem ich schon mal nen Tag verbracht hab :o)

      wie kann ich eigentlich PHP dazu übereden meine erstellte Datei als UTF-8 abzuspeichern?

      unter file bei php.net kann ich diesbezüglich nichts finden

      mfg
      Twilo

      1. Veruchs mit utf8_encode()

        LG
        Mike

        1. Hallo,

          Veruchs mit utf8_encode()

          meinst du damit dass es ausreicht, wenn man nur den Inhalt durch die Funktion laufen lässt?

          In mein Editor kann ich noch einstellen, dass das Dokument in UTF-8 bzw. UTF-8 mit Signatur gespiechert werden soll, wie mahc ich genau das in PHP?

          wenn ich jetzt das Dokument normal abspeicher und die Sonderzeichen in UTF-8 abspeicher...
          meckert der Validator rum, dass das Dokument kein UTF-8 Dokument ist

          mfg
          Twilo

          1. $text='XMLINHALT'
            $text=utf8_encode($text);

            fopen(... usw.)

            Damit ist das File utf8 Enkodiert...
            Mehr musst Du nicht machen.

            Mike

  3. du hast hier nicht mehr einen 'flachen' baum (2-dimensional), welcher sich natürlich einfach 1:1 umsetzen läßt, sondern schon eine ebene mehr.
    wie mike schon sagte, gibts hierfür 2 möglichkeiten:
    1. geschachtelte schleifen (über db)
    oder
    2. eine struktur

    die 1. möglichkeit sieht einfacher aus, kostet aber mehr db performance. sinnvoller wäre die 2. möglichkeit.
    hierfür müssen die beiden tabellen verknüpft werden.
    dann beinhaltet jeder datensatz den vollen pfad mit all seinen elementen.
    in der schleife über die datensätze muss dann der jeweilige 'gruppenwechsel' (ebenen) ermittelt werden um die entsprechende xml auszugeben.
    man kann aber auch in dieser schleife erst nur ein baum-array zusammenbasteln und dieses anschließend durchlaufen. dann ergibt sich der gruppenwechsel automatisch.