Heizer: (XML) (XSLT) Wie kann ich auf XML zugreifen?

Liebes Forum

Ich programmiere mal etwas aufwändigeres, und wichtig ist mir vor allem die modulisierbarkeit. Ich habe einige PHP Objecte, die ein XML-Dokument erzeugen. Dazu habe ich eine XSLT Datei, die das in HTML umwandelt. Dies geschieht clientseitig, also ist die XML Datei im Browser vorhanden. Ich würde nun gerne mit Javascript auf das XML zugreifen, so daß sich das gerenderte HTML automatisch anhand des XSLT erneuert.

Ziel ist es, beim schreiben von PHP-Objekten und ihren korrespondierenden Javascript-Objekten ohne Kenntnis des XSLT auf DOM-Elemente zugreifen kann. Gibt es dafür eine Lösung (vielleicht auch eine ganz andere als hier angedacht)?

Danke

Thomas

  1. Hallo,

    Ich programmiere mal etwas aufwändigeres, und wichtig ist mir vor allem die modulisierbarkeit. Ich habe einige PHP Objecte, die ein XML-Dokument erzeugen. Dazu habe ich eine XSLT Datei, die das in HTML umwandelt. Dies geschieht clientseitig, also ist die XML Datei im Browser vorhanden. Ich würde nun gerne mit Javascript auf das XML zugreifen, so daß sich das gerenderte HTML automatisch anhand des XSLT erneuert.

    Ziel ist es, beim schreiben von PHP-Objekten und ihren korrespondierenden Javascript-Objekten ohne Kenntnis des XSLT auf DOM-Elemente zugreifen kann.

    Das ist etwas widersprüchlich.
    Aber du könntest im XSLT einen JavaScript-Block schreiben in dem du dann AJAX verwendest und so nachmal die XML-Datei ladest.

    Grüße
    Thomas

    1. Ziel ist es, beim schreiben von PHP-Objekten und ihren korrespondierenden Javascript-Objekten ohne Kenntnis des XSLT auf DOM-Elemente zugreifen kann.

      Das ist etwas widersprüchlich.

      Wenn in meinem XML steht:

      <element>
        <wert>42</wert>
        <wert>99</wert>
      </element>

      Und im XSLT steht:

      <xsl:template match="element/wert">
        <b><xsl:value-of select="."/></b>
      </xsl:template>

      Dann möchte ich gerne auf alle Werte so zugreifen können:

      $werte = document.getElementsByTagName('wert');
      foreach (var e in $werte)
        $werte[e].nodeValue = parseInt($werte[e])+2;

      Das resultierende (und angezeigte) HTML sollte dann so aussehen:

      <b>44</b>
      <b>101</b>

      Geht das irgendwie, oder muß ich mir da wirklich was einfallen lassen? Kann mir irgendwie nicht vorstellen, daß ich der erste bin, der dieses Problem hat.

      Grüße

      Thomas

      1. Hallo,

        Ziel ist es, beim schreiben von PHP-Objekten und ihren korrespondierenden Javascript-Objekten ohne Kenntnis des XSLT auf DOM-Elemente zugreifen kann.

        Das ist etwas widersprüchlich.

        Wenn in meinem XML steht:

        <element>
          <wert>42</wert>
          <wert>99</wert>
        </element>

        Und im XSLT steht:

        <xsl:template match="element/wert">
          <b><xsl:value-of select="."/></b>
        </xsl:template>

        Dann möchte ich gerne auf alle Werte so zugreifen können:

        $werte = document.getElementsByTagName('wert');
        foreach (var e in $werte)
          $werte[e].nodeValue = parseInt($werte[e])+2;

        Das resultierende (und angezeigte) HTML sollte dann so aussehen:

        <b>44</b>
        <b>101</b>

        Es liegt an mir: ich versteh wirklich nicht was du da machen willst.
        Erst transformierst du das XML mit XSLT zu HTML, dann willst du das ganze doch nicht mit XSLT transformieren, weil man das nicht kennen soll / nicht kennt?

        Wie gesagt, was mir einfällt ist, dass du nach in deinem XSLT eine AJAX-Funktion hast, die dann vom (aus der XML/XSL-Transformation produzierten) HTML aus nochmal das XML ladet. Da könntest du auf die Elemente im XML zugreifen. Aber wenn in deinem XSLT ein:

        <xsl:template match="element/wert">
           <b><xsl:value-of select="."/></b>
        </xsl:template>

        steht, steht im HTML bereits:
          <b>44</b>
          <b>101</b>

        Geht das irgendwie, oder muß ich mir da wirklich was einfallen lassen? Kann mir irgendwie nicht vorstellen, daß ich der erste bin, der dieses Problem hat.

        Wie gesagt, ich verstehe _wirklich nicht_ was du da machen und erreichen möchtest.

        Grüße
        Thomas

      2. Hallo,

        Wenn in meinem XML steht:

        <element>
          <wert>42</wert>
          <wert>99</wert>
        </element>

        Ich verstehe Dein Problem auch nicht. Wenn der Datenzugriff sowieso clientseitig ablaufen soll und eine JS-Abfrage mittels getElementsByTagName() angedacht ist, dann ist XSLT doch verzichtbar. Lade das XML-Dokument mittels AJAX-Techniken (siehe Test in diesem Posting) und greife direkt auf das resultierende XML-Objekt zu.

        Wenn unbedingt XSLT noetig ist und die Daten spaeter via DOM zur Verfuegung stehen sollen, dann laesst sich auch im XSL-Code ein JS-Array mit den Werten erzeugen.

        MfG, Thomas