Sonia: PHP & XML & Die beste Form gesucht

Hallo,

zur Zeit bastele ich an meiner Prüfungsvorbereitung
und die besteht aus einer Webseite.
Thema ist unter anderem eine _sehr_ oberflächliche
Einführung wie man mit PHP ein XML Dokument ausliest.
Nun wäre es ja keine Vorbereitung, wenn meine Webseite
diese Möglichkeit nicht berücksichtigen würde.
Schon bin ich auf das erste Problem oder - vielleicht ist
es ja keines - gestossen.
Ich weiß wie das grundsätzlich funktioniert, aber was ich
suche ist folgendes:
in manchen Beispielen, die ich gefunden habe steht in der
XML-Datei
-->
<buch>
  <kapitel>
    <daten></daten>
  </kapitel>
</buch>
<--
Ich möchte, dass jedes Kapitel eine eigene "virtuelle"
Seite ergibt, sodass ich sozusagen umblättern kann.
Was ich jetzt aber nicht weiß, ist, ob man das mit einem
einzigen xml dokument machen kann. Wenn das so ist,
würde das doch bedeuten, dass man immer nur einen Teilbereich
ausliesst oder? Ich weiss aber nur wie man die ganze Datei
auslesen kann..... puh
ich hoffe das war verständlich, wenn ja, könnte mir
vielleicht einer einen Tip geben?

Danke schonmal, auch fürs lesen :-)

Gruß
Sonia

  1. Hallo!

    Du liest die ganze Datei und nimmst dir dann den Kapitel-Block mit der Setennummer. Den gibst du aus - und fertig! Mit welchem XML-Parswer arbeitest du denn?? DOM-XML?? Da kenn ich mich leider nicht so aus...

    Bye, Peter

    1. hi,

      Du liest die ganze Datei und nimmst dir dann den Kapitel-Block mit der Setennummer. Den gibst du aus - und fertig! Mit welchem XML-Parswer arbeitest du denn?? DOM-XML?? Da kenn ich mich leider nicht so aus...

      prima... du hast mich soeben auf *die* Idee gebracht.
      Dankeschön :-)

      1. Hi

        Wenns ncih klappt, einfach nochmal melden..!

        Peter

  2. Hi Sonia,

    du kannst auch das ganze xml Gebilde einlesen und als HTML ausgeben; dabei bekommt jedes "Buch" eine ID zugewiesen über die du die Anzeige steuern kannst. So hab ich das bei einem meiner Projekte gemacht:

    z. B.  (sehr vereinfacht!)

    <table>
    <tr id="buch_1">
    <td>....</td>
    </tr>
    <tr id="buch_2">
    <td>....</td>
    </tr>
    ...
    </table>

    Beim Aufbau der HTML Seite bekommen zunächst alle tr Elemente  die CSS Eigenschaft display:none, damit werden sie ausgeblendet.
    Über eine JS-Funktion und document.getElementById() kannst du dann wahlweise das eine oder andere Buch über display:block wieder einblenden (vorher die sichtbaren tr's manuell ausblenden, sofern welche sichtbar sind). ...

    So der grobe Ablauf.

    Grüße
    Michael

    1. Hi

      Äm - das is aber nciht so wass sie will, glaub ich. Ich denke, sie sollen ein Script bauen, welches zb als "showchapter.php4?c=3" aufgerufen wird und dann das 4. Kapitel aus der XML-Datei ausgibt.. So habe ichs verstanden...

      Greez, Peter

      1. hi,

        Äm - das is aber nciht so wass sie will, glaub ich. Ich denke, sie sollen ein Script bauen, welches zb als "showchapter.php4?c=3" aufgerufen wird und dann das 4. Kapitel aus der XML-Datei ausgibt.. So habe ichs verstanden...

        ja ganz genau so meine ich das! :-)

        1. Hi,

          Äm - das is aber nciht so wass sie will, glaub ich. Ich denke, sie sollen ein Script bauen, welches zb als "showchapter.php4?c=3" aufgerufen wird und dann das 4. Kapitel aus der XML-Datei ausgibt.. So habe ichs verstanden...

          ja ganz genau so meine ich das! :-)

          Ok, dann hatte ich den Teil des Postins wohl überlesen :-)

          Das Beispiel das ich genannt hatte war früher auch so aufgebaut, dass man per URL &start_book=... angegeben hatte wo was angezeigt werden sollte; ich hab' das aber vor einiger Zeit geändert weil mir das hin und her zwischen Client und Server zu nervig war und das ein- und ausblenden besser gefallen hatte...

          Aber zurück zum eigentlichen Thema:

          Du könntest z. B. beim Einlesen der xml Daten (wo speicherst du die zwischen? in einem String-ähnlichen Teil oder in einem Array oder ....?) schon nach Buchkapiteln getrennt zwischenspeichern, wie z. B.

          $aBuch = array(
          "c1" => "hier folgen dann die <daten></daten> von Chapter 1",
          "c2" => "hier folgen dann die <daten></daten> von Chapter 2",
          ...);

          Ob es jetzt sinnvoll ist nur den <daten>..</daten> Tag Bereich im Array abzuspeichern und diesen dann erst später bei Aufbau der HTML Seite näher zu analysieren oder ob man gleich die ganzen Daten da rauszieht, kommt auf die genaue Struktur des XML an.

          Beim Aufbau der HTML Seite kannst Du dann über z. B.

          switch ($HTTP_GET_VARS['c']){
          case "c1" : Code um Chapter 1 anzuzeigen; break;
          case "c2" : Code um Chapter 2 anzuzeigen; break;
          ...
          }

          die Daten verwenden.

          Vielleicht kannst Du noch sagen wie du das xml genau laden / parsen / analyisieren tust? Dann könnte man auch mehr auf den genauen Parse-Ablauf beim Erstellen der Buchkapitel eingehen.

          Ansonsten hoffe ich, ein wenig hilfreich gewesen zu sein.

          Grüße,
          Michael

          1. Vielleicht kannst Du noch sagen wie du das xml genau laden / parsen / analyisieren tust? Dann könnte man auch mehr auf den genauen Parse-Ablauf beim Erstellen der Buchkapitel eingehen.

            dazu kannst du hier schauen:
            [pref:t=49548&m=270965]

            Ansonsten hoffe ich, ein wenig hilfreich gewesen zu sein.

            ja auf jeden Fall, danke :-)

            Gruß Sonia