Adriana: Filtern beim öffnen?

Hallo miteinander

Zuerst meine Frage in kurz: Wie öffne ich ein XML-Dokument mit XSL-Schema und übergebe ihm gleich einen Parameter zum filtern?

Die Problematik
****************
Ich habe eine Seite mit drei Frames. Im 1. Frame wird ein Inhaltsverzeichnis dargestellt, im 2. Frame XML-Daten (via XSL dargestellt) und im 3. Frame eine Grafik.

Wird ich im Inhaltsverzeichnis etwas auswähle, wird im 3. Frame die Grafik geladen. Ich möchte jetzt aber, dass zusätzlich im 2. Frame die XML Daten zu dieser Grafik angezeigt werden. Da ich nicht für jede Grafik ein eigenes XML erstellen möchte, dachte ich mir, dass es doch eine Möglichkeit geben muss, die XML-Daten aufgrund eines Aufrufes zu filtern, damit nur die benötigten Infos angezeigt werden.

Wer kann mir helfen?
Thanks
Adriana

  1. Hallo,

    Zuerst meine Frage in kurz: Wie öffne ich ein XML-Dokument mit XSL-Schema und übergebe ihm gleich einen Parameter zum filtern?

    Auf der Clientseite?
    Nur mit JavaScript und DOM.

    Die Problematik
    Wird ich im Inhaltsverzeichnis etwas auswähle, wird im 3. Frame die Grafik geladen. Ich möchte jetzt aber, dass zusätzlich im 2. Frame die XML Daten zu dieser Grafik angezeigt werden. Da ich nicht für jede Grafik ein eigenes XML erstellen möchte, dachte ich mir, dass es doch eine Möglichkeit geben muss, die XML-Daten aufgrund eines Aufrufes zu filtern, damit nur die benötigten Infos angezeigt werden.

    Wie gesagt, mit JavaScript kannst du erreichen, dass du Variable an deinem XSL-Sheet übergeben kannst und so mit Hifel von XSL die Daten "gefiltert" ausgibst.
    Lösungen dazu findest du im Archiv (z.B. http://forum.de.selfhtml.org/archiv/2004/4/78019/#m451662 enthält ein komplettes Bsp. wie du Variablen per JavScript weitergeben kannst).

    Grüße
    Thomas

    1. Hallo Thomas

      Ich habe eben im Archiv eine Möglichkeit von Dir gefunden:

      http://forum.de.selfhtml.org/archiv/2004/4/80155/#m467128

      Dort wird der Parameter via Url übergeben. Ich probierte diese Lösung nachzumachen. Leider kommt jetzt kein Eintrag mehr, wenn ich die XML-Datei mit &page=Test aufrufe (obwohl Dokument = Test vorhanden ist). Siehst Du zufällig den Fehler? tFiles enthält Dokument, Icon, File und Beschreibung

      Thanks
      Adriana

      <?xml version="1.0" encoding="iso-8859-1"?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:param name="page" select="''" />
      <xsl:template match="/">
       <html>
       <head>
       </head>
       <body>
      <b>Files</b>
        <xsl:apply-templates select="tFiles[@Dokument = $page]" />
      </body>
      </html>
       </xsl:template>

      <xsl:template match="tFiles">
       <table border="0">
       <tr>
        <td valign="top"><img><xsl:attribute name="src"><xsl:value-of select="Icon" /></xsl:attribute></img></td>
        <td valign="top"><a><xsl:attribute name="href"><xsl:value-of select="File" /></xsl:attribute><xsl:value-of select="Beschreibung" /></a></td>
       </tr>
       </table>
      </xsl:template>
      </xsl:stylesheet>

      Hallo,

      Zuerst meine Frage in kurz: Wie öffne ich ein XML-Dokument mit XSL-Schema und übergebe ihm gleich einen Parameter zum filtern?

      Auf der Clientseite?
      Nur mit JavaScript und DOM.

      Die Problematik
      Wird ich im Inhaltsverzeichnis etwas auswähle, wird im 3. Frame die Grafik geladen. Ich möchte jetzt aber, dass zusätzlich im 2. Frame die XML Daten zu dieser Grafik angezeigt werden. Da ich nicht für jede Grafik ein eigenes XML erstellen möchte, dachte ich mir, dass es doch eine Möglichkeit geben muss, die XML-Daten aufgrund eines Aufrufes zu filtern, damit nur die benötigten Infos angezeigt werden.

      Wie gesagt, mit JavaScript kannst du erreichen, dass du Variable an deinem XSL-Sheet übergeben kannst und so mit Hifel von XSL die Daten "gefiltert" ausgibst.
      Lösungen dazu findest du im Archiv (z.B. http://forum.de.selfhtml.org/archiv/2004/4/78019/#m451662 enthält ein komplettes Bsp. wie du Variablen per JavScript weitergeben kannst).

      Grüße
      Thomas

      1. Hallo,

        Ich habe eben im Archiv eine Möglichkeit von Dir gefunden:

        http://forum.de.selfhtml.org/archiv/2004/4/80155/#m467128

        Dort wird der Parameter via Url übergeben.

        ??? die Fragen dort, haben nichts mit deinem Problem zu tun.

        Ich probierte diese Lösung nachzumachen. Leider kommt jetzt kein Eintrag mehr, wenn ich die XML-Datei mit &page=Test aufrufe (obwohl Dokument = Test vorhanden ist). Siehst Du zufällig den Fehler?

        Ja, dir fehlt die HTML-Seite, von wo aus du dein XML und XSL vie JavaScript aufrufst. So wie unter: http://forum.de.selfhtml.org/archiv/2004/4/78019/#m451662 die HTML-Seite. Dort ruft sich war die Seite selbst auf (du möchstest sie aus einem anderen Frame heraus aufrufen), aber ich denke, dass kann man anpassen.
        Wie das über Fames gehen kann zeigt z.B. Thomas Meinike: http://www.datenverdrahten.de/iproxslt/tourdaten/iejs/index.htm

        Grüße
        Thomas

        1. Sorry, ich hatte den Beitrag verwechselt... Wenn ich Deine Beispiele starten will, kommt bei mir immer der Fehler im IE: "Automatisierungsserver kann Objekt nicht erstellen." und es wird nichts angezeigt. Wahrscheinlich hat das mit unseren Sicherheitseinstellungen im Geschäft zu tun, da ist so ziemlich alles gesperrt. Ich habe meine HTML-Seite so gestaltet das es geht:

          (...)
          <script language="javascript" for ="window" event"onload">

          var xmldata = new ActiveXObject("Microsoft.XMLDOM");
          xmldata.load("tFiles.xml");

          var xsldata = new ActiveXObject("Microsoft.XMLDOM");
          xsldata.load("tFiles.xsl");

          document.write(xmldata.transformNode(xsldata));

          </script>
          (...)

          Gibt es eine Möglichkeit, auch so Parameter zu übergeben?
          Danke
          Adriana

          Hallo,

          Ich habe eben im Archiv eine Möglichkeit von Dir gefunden:

          http://forum.de.selfhtml.org/archiv/2004/4/80155/#m467128

          Dort wird der Parameter via Url übergeben.

          ??? die Fragen dort, haben nichts mit deinem Problem zu tun.

          Ich probierte diese Lösung nachzumachen. Leider kommt jetzt kein Eintrag mehr, wenn ich die XML-Datei mit &page=Test aufrufe (obwohl Dokument = Test vorhanden ist). Siehst Du zufällig den Fehler?

          Ja, dir fehlt die HTML-Seite, von wo aus du dein XML und XSL vie JavaScript aufrufst. So wie unter: http://forum.de.selfhtml.org/archiv/2004/4/78019/#m451662 die HTML-Seite. Dort ruft sich war die Seite selbst auf (du möchstest sie aus einem anderen Frame heraus aufrufen), aber ich denke, dass kann man anpassen.
          Wie das über Fames gehen kann zeigt z.B. Thomas Meinike: http://www.datenverdrahten.de/iproxslt/tourdaten/iejs/index.htm

          Grüße
          Thomas

          1. Hallo,

            »»Wenn ich Deine Beispiele starten will, kommt bei mir immer der Fehler im IE: "Automatisierungsserver kann Objekt nicht erstellen." und es wird nichts angezeigt. Wahrscheinlich hat das mit unseren Sicherheitseinstellungen im Geschäft zu tun,

            Ja, das ist eine Frage der Sicherheitseinstellungen.

            var xmldata = new ActiveXObject("Microsoft.XMLDOM");
            xmldata.load("tFiles.xml");

            var xsldata = new ActiveXObject("Microsoft.XMLDOM");
            xsldata.load("tFiles.xsl");

            Das unterschiedet sich nicht wesentlich von: objXSLT.load('xxx.xsl');

            Gibt es eine Möglichkeit, auch so Parameter zu übergeben?

            Im Moment kann ich das nicht ausprobieren, aber versuche die restliche Variablen und die andere Funktion auf deine 'Variablen' anzupassen.

            Grüße
            Thomas

            PS: und eine serverseitige Verarbeitung kommt nicht in Frage?

            1. Habe ich bereits probiert, das Objekt unterstützt diese Methode nicht...

              Als kleine Userin gehe ich nicht davon aus, dass ich hier irgendwelche Rechte für serverseitige Sachen habe...

              Oder könnte ich via Javascript in einem anderen Frame den "Filternamen" auslesen? zB das der Header als Filter hinhalten könnte?

              Hallo,

              »»Wenn ich Deine Beispiele starten will, kommt bei mir immer der Fehler im IE: "Automatisierungsserver kann Objekt nicht erstellen." und es wird nichts angezeigt. Wahrscheinlich hat das mit unseren Sicherheitseinstellungen im Geschäft zu tun,

              Ja, das ist eine Frage der Sicherheitseinstellungen.

              var xmldata = new ActiveXObject("Microsoft.XMLDOM");
              xmldata.load("tFiles.xml");

              var xsldata = new ActiveXObject("Microsoft.XMLDOM");
              xsldata.load("tFiles.xsl");

              Das unterschiedet sich nicht wesentlich von: objXSLT.load('xxx.xsl');

              serverseitige Verarbeitung kommt nicht in Frage?

              1. Hallo,

                Oder könnte ich via Javascript in einem anderen Frame den "Filternamen" auslesen? zB das der Header als Filter hinhalten könnte?

                Weiss ich nicht, aber darauf würde ich mich auch nicht verlassen.

                »»Wenn ich Deine Beispiele starten will, kommt bei mir immer der Fehler im IE: "Automatisierungsserver kann Objekt nicht erstellen." und es wird nichts angezeigt. Wahrscheinlich hat das mit unseren Sicherheitseinstellungen im Geschäft zu tun,

                Ja, das ist eine Frage der Sicherheitseinstellungen.

                Und auch eine Sache der verwendeten MSXML-Version "Msxml2.DOMDocument.4.0" benützt explizit die MSXML 4.

                Ich habe jetzt mit nur wenig Anpassung das Laden der XML-Datei in Fmrames gemacht:
                <html>
                        <head>
                                <title>
                                        Untitled
                                </title>
                        </head>
                        <!-- frames -->
                        <frameset cols="26%,*">
                                <frame name="NAV" src="nav.html" marginwidth="10" marginheight="10" scrolling="auto" frameborder="1" />
                                <frameset rows="57%,*">
                                        <frame name="MAIN" src="main.html" marginwidth="10" marginheight="10" scrolling="auto" frameborder="1" />
                                        <frame name="BILD" src="bild.html" marginwidth="10" marginheight="10" scrolling="auto" frameborder="1" />
                                </frameset>
                                <noframes>
                                        <body>
                                        </body>
                                </noframes>
                        </frameset>
                </html>

                in nav.html wird dann der Parameter für das XSl gesetzt:
                <html>
                <head>
                   <script language="JavaScript" type="text/javascript">
                /* FÜR DEN IE  */

                var objSrcTree, ObjXSLT, objCache;

                function init()
                      {
                         objSrcTree = new ActiveXObject('MSXML2.DOMDocument.4.0');
                         objSrcTree.async = false;
                         objSrcTree.load('xsl-variable-mit-javascript.xml');

                objXSLT=new ActiveXObject('MSXML2.FreeThreadedDOMDocument.4.0');
                         objXSLT.async = false;
                         objXSLT.load('xsl-variable-mit-javascript.xsl');

                objCache   = new ActiveXObject("Msxml2.XSLTemplate.4.0");
                         objCache.stylesheet = objXSLT;
                      }

                function show(title)
                      {
                         var objXSLTProc = objCache.createProcessor();
                         objXSLTProc.input = objSrcTree;
                         objXSLTProc.addParameter("title", title, "");
                         objXSLTProc.transform();
                   parent.frames["MAIN"].document.open();
                         parent.frames["MAIN"].document.write(objXSLTProc.output);
                   parent.frames["MAIN"].document.close();
                      }

                </script>
                   <title>...</title>
                </head>

                <body onload="init();">
                   <div>Books reviewed:
                        <a href="javascript:show('A Good Book')">A Good Book</a>
                        <a href="javascript:show('A Bad Book')">A Bad Book</a>
                        <a href="javascript:show('A So-so Book')">A So-so Book</a>
                   </div>
                   <div id="output" style="margin:1em"></div>
                </body>
                </html>

                Da ich bei mir den MSXML4 installiert habe (und der läuft etwas anderes unter winXP) habe ich jetzt nicht testen können, wie man den JavaScript für den älteren Syntax anpasst (aber in seiner Beispielseite, macht Thomas M. z.B. genau dies.)

                Grüße
                Thomas

        2. Oder wäre das ein Ansatz:

          Kann ich im XSL-Dokument auf einen anderen Frame zugreifen und dort zB den Titel holen und diesen dann als Parameter benützen?