AGO: XML / XSLT in HTML klappt nicht im Netscape,Opera...

Hi an alle,
hab ein Problem mit XML/XSLT. Bin da noch Anfänger.
Habe in meiner HTML-Datei über einen XSL-Transformer
eine XML-Datei eingebunden. Im IE läuft es auch wunderbar.
Aber im Netscape, usw. läuft es nicht. Was muss ich machen,
wenn ich eine XML- und XSL-Datei einbinden möchte und wie
kann ich sie dann transformieren, sodass Netscape es versteht.

Hier mein Code und vielen Dank für jede Hilfe:

HTML-Datei:
<html>
  <head>
    <XML id="source" src="XMLFile.xml"></XML>
    <XML id="transform" src="XSLFile.xsl"></XML>

<SCRIPT FOR="window" EVENT="onload">
      xslMenu.innerHTML = source.transformNode(transform.XMLDocument);
    </SCRIPT>
  </head>

<body leftmargin="0" topmargin="0">
    <DIV id="xslMenu" align="left"></DIV>
  </body>
</html>

XML-Datei:
<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet href="XSLFile.xsl" type="text/xsl"?>

<menulist>
    <menu caption="Willkommen" url="index.htm" ident="btnLHome"/>
    <menu caption="News" url="news.htm" ident="btnLNews">
      <menu caption="News1" url="news1.htm" ident="btnLNews1"/>
    </menu>
    <menu caption="Kontakt" url="kontakt.htm" ident="btnLKontakt"/>
</menulist>

XSL-Datei:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:strip-space elements="*"/>
  <xsl:output indent="yes" method="xml"/>

<xsl:template match="menulist">
  <table cellspacing="0" cellpadding="0" width="120" style="border-collapse: collapse">
    <xsl:apply-templates select="@*|node()"/>
  </table>
  </xsl:template>

<xsl:template match="menu">
    <xsl:variable name="caption" select="@caption"/>
    <xsl:variable name="url" select="@url"/>
    <xsl:variable name="ident" select="@ident"/>
    <xsl:variable name="level" select="count(ancestor::*) - 1"/>
    <xsl:variable name="submenuid" select="concat('submenu', $level, position())"/>

<tr>
      xsl:choose
      <xsl:when test="$level=0">
        <td id="{$ident}" align="left" height="20">
          <a href="{$url}">
            <font class="ButtonText">
              <span style="text-decoration: none">
                <xsl:value-of select="concat('&#160;&#160;', $caption)"/>
              </span>
            </font>
          </a>
        </td>
      </xsl:when>
      <xsl:when test="$level=1">
        <td id="{$ident}" align="left" height="20">
          <a href="{$url}">
            <font class="ButtonText">
              <span style="text-decoration: none">
                <xsl:value-of select="concat('&#160;&#160;', $caption)"/>
              </span>
            </font>
          </a>
        </td>
      </xsl:when>
      xsl:otherwise
      </xsl:otherwise>
      </xsl:choose>

</tr>

</xsl:template>

<xsl:template match="@*|node()">
    xsl:copy
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

  1. Hi,

    meinst du eine clientseitige Transformation von XML? Meines Wissens ist das gerade eine der "Stärken", dass der IE das unterstützt, bei uns in der Firma wurde aus diesem Grund vor 4 Jahren von Netscape auf IE umgeschwenkt weil eben genau dies nicht unterstützt wird. Lösung wäre dann eine serverseitige Transformation.

    MfG
    Rouven

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Hi,
      wie kann ich eine serverseitige Transformation umsetzen?
      Wie sieht sowas aus? Ein Beispiel wäre gut.
      Bitte dran denken, dass ich Anfänger auf diesem Gebiet bin.

      Danke und Gruß
      Arne

      1. Hallo,

        dein Grundproblem ist, du braucht Kenntnis einer serverseitigen Sprache um dies tun zu können. Möglichkeiten (ohne Anspruch auf Vollständigkeit) sind PHP, ASP(.NET), JSP etc.
        Du brauchst also eine kleine Programmlogik auf der Serverseite, soweit ich weiß sind es z.B. in eine JSP-Seite nicht viel mehr als 5 Zeilen die benötigt werden um die Transformation durchzuführen. Wenn du Anfänger bist gehe ich aber zunächst mal davon aus, dass du nicht mal Webspace hast der solche Sprachen unterstützt, geschweige denn dass du jetzt eine solche Sprache lernen willst. Wenn ich damit richtig liege, dann bleibt dir nicht viel anderes übrig als auf die XML-Transformation zu verzichten oder sie optional zu machen (so nach dem Motto die Hauptmenüpunkte kommen ohne, die Unterpunkte kommen durch die Transformation und sind dann nur bei IE-Benutzern vorhanden - was natürlich keine schöne Lösung ist). Wenn du dich stattdessen in das Thema einarbeiten willst dann guck dich mal im Archiv oder anderswo um welche Sprache für die geeignet ist und such dann im Netz nach entsprechenden Tutorials, sowas findet sich denke ich recht schnell...

        MfG
        Rouven

        --
        -------------------
        ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
  2. Hi,

    <html>
      <head>
        <XML id="source" src="XMLFile.xml"></XML>
        <XML id="transform" src="XSLFile.xsl"></XML>

    HTML kennt kein XML-Element.
    Von daher ist es nicht sehr verwunderlich, wenn ein Browser sich weigert, das mitzumachen.

    Liefere eine korrekte XML-Datei mit stylesheet-Angabe für das XSL-File an die Browser aus, dann sind die Erfolgsaussichten wesentlich besser.

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.Mud-Guard.de/
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  3. Hallo,

    hab ein Problem mit XML/XSLT. Bin da noch Anfänger.
    Habe in meiner HTML-Datei über einen XSL-Transformer
    eine XML-Datei eingebunden. Im IE läuft es auch wunderbar.
    Aber im Netscape, usw. läuft es nicht. Was muss ich machen,
    wenn ich eine XML- und XSL-Datei einbinden möchte und wie
    kann ich sie dann transformieren, sodass Netscape es versteht.

    Hier eine HTML Datei die im IE und im Mozilla funktioniert. Andere Browser habe ich nicht getestet.

    Das einzige was du am Code ändern musst, ist den Namen für deine XML und XSL Datei richtig eintragen (ich habe aber die Namen genommen, die du bereits benutzt hast).

    Grüße
    Thomas

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
     <head>
      <title>XML und XSLT in HTML mit Javascript einfügen</title>
      <script language="JavaScript" type="text/javascript">
       <!--
       var XMLDatei = "XMLFile.xml"; // hier muss man die XML Datei angeben
       var XSLDatei = "XSLFile.xsl"; // hier muss man die XML Datei angeben
       var XMLEingabe;
       var XSLEingabe;
       var HTMLAusgabe;

    function transform()
        {
         // abfrage für den Internet Explorer
         if(document.all)
          {
           // XML laden
           XMLEingabe = new ActiveXObject("MSXML2.DOMDocument");
           XMLEingabe.async = false;
           XMLEingabe.load(XMLDatei);

    // XSL laden
           XSLEingabe = new ActiveXObject("MSXML2.DOMDocument");
           XSLEingabe.async = false;
           XSLEingabe.load(XSLDatei);

    // generierten HTML-Code ausgeben
           HTMLAusgabe = XMLEingabe.transformNode(XSLEingabe.documentElement);
           document.getElementById("ausgabe").innerHTML = HTMLAusgabe;
          }
         // abfrage für Mozilla
         else if(document.defaultView)
          {
           // im Mozilla erst XSL laden
           var xsltProcessor = new XSLTProcessor();
           var myXMLHTTPRequest = new XMLHttpRequest();
           myXMLHTTPRequest.open("GET", XSLDatei, false);
           myXMLHTTPRequest.send(null);

    XSLEingabe = myXMLHTTPRequest.responseXML;
           xsltProcessor.importStylesheet(XSLEingabe);

    // XML laden
           myXMLHTTPRequest = new XMLHttpRequest();
           myXMLHTTPRequest.open("GET", XMLDatei, false);
           myXMLHTTPRequest.send(null);

    XMLEingabe = myXMLHTTPRequest.responseXML;

    // generierten HTML-Code ausgeben
           HTMLAusgabe = xsltProcessor.transformToFragment(XMLEingabe, document);
           document.getElementById("ausgabe").appendChild(HTMLAusgabe);
          }
         else
          {
           alert("keine Unterstützung für XML/XSL TRansformation");
          }
        }
       //-->
      </script>
     </head>

    <body onload="transform()">
      <h1>XML und XSLT in HTML mit Javascript einfügen</h1>
      <hr>

    <div id="ausgabe"></div>

    <hr>
     </body>
    </html>