Adomo: XSL ggf nicht anwenden

Hallo,

ich verwende ein Style Sheet um eine XML Datei anzuzeigen.

Ich möchte jetzt das Style Sheet nicht verwenden wenn es nicht zu XML Dokument passt (ich habe dafür einen Tag VERSION eingefügt). Kann ich sagen "Wenn das XML Dokument nicht die richtige Version hat, nutze das Style Sheet nicht?" ???? Ich möchte dann das XML Dok ganz normal ausgeben.

Daaanke

  1. Ich möchte jetzt das Style Sheet nicht verwenden wenn es nicht zu XML Dokument passt (ich habe dafür einen Tag VERSION eingefügt). Kann ich sagen "Wenn das XML Dokument nicht die richtige Version hat, nutze das Style Sheet nicht?" ???? Ich möchte dann das XML Dok ganz normal ausgeben.

    Wie wäre es, das dem dem Stylesheet zu überlassen, und statt dem apply bei Bedarf einfach eine copy auszugeben?

  2. Hallo,

    Ich möchte jetzt das Style Sheet nicht verwenden wenn es nicht zu XML Dokument passt (ich habe dafür einen Tag VERSION eingefügt). Kann ich sagen "Wenn das XML Dokument nicht die richtige Version hat, nutze das Style Sheet nicht?" ???? Ich möchte dann das XML Dok ganz normal ausgeben.

    Klar kannst du das sagen.
    Wenn du etwas schreibst, dass deine XML-Datei noch vor der XSL-Transformation analysiert und dein VERSION-Element ausliest.

    Im Stylesheet kannst du, wie schon gesagt, selbst sagen was passieren soll wenn das VERSION-Element vorhanden ist:
    <xsl:template match="/">
     xsl:choose
      <xsl:when test="VERSION = '0.9'">
       <xsl:copy-of select="/" />
      </xsl:when>
      xsl:otherwise
      <!-- alles andere was passieren soll -->
      </xsl:otherwise>
     </xsl:choose>
    </xsl:template>

    Grüße
    Thomas

    1. xsl:otherwise
        <!-- alles andere was passieren soll -->
        </xsl:otherwise>

      Dieses im otherwise ist mein Problem. Ich möchte im otherwise sagen "Ignoriere das Style Sheet". Die XML Datei soll also so angezeigt werden als ob es das Style Sheet nicht gibt. Also zum Beispiel im Internet Explorer dieser schöne Baum.

      Kann ich nicht den Input Tree(?), wieder ausgeben?

      Gruß

      Adomo

      1. Hallo,

        xsl:otherwise
          <!-- alles andere was passieren soll -->
          </xsl:otherwise>

        Dieses im otherwise ist mein Problem. Ich möchte im otherwise sagen "Ignoriere das Style Sheet". Die XML Datei soll also so angezeigt werden als ob es das Style Sheet nicht gibt. Also zum Beispiel im Internet Explorer dieser schöne Baum.

        Das geht nur wenn du Scriptest und schon vor der Anwendung der Stylesheets das VERSION-element ausliest. Also erst aus eine HTML-Datei.
        Ich habe dir ein Beispiel geschrieben wie das mit dem IE geht (nein ich weiss jetzt auch nicht, wie man das jetzt gleich für beliebige Dateien macht, aber schließlich sollst du auch etwas tüfteln! ;-) )

        Grüße
        Thomas

        <html>
        <head>
          <title>sample</title>
          <script language = "javascript">
         function init()
         {
          var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
          xmlDoc.async=false;

        //hier gibst du den pfad zu deiner xml datei an
          xmlDoc.load("temp.xml");
          var objNodeList;
          xmlDoc.setProperty("SelectionLanguage", "XPath");

        // hiermit selektierst du dein version-element
          // gegebenfalls muss du den pfad anpassen:
          // z.B.: electSingleNode("/xmldokumentelement/version")
          // du kannst in klammer xpath ausdrücke verwenden
          objNodeList = xmlDoc.documentElement.selectSingleNode("version");

        //hier vergleichts du was das version element einen text enthält
          // du kannst hier die übliche vergleichsmethoden aus javascript nutzen
          if (Number(objNodeList.text) < "2.0")
           {
            //ist die bedingung erfüllt (oder nicht erfüllt, ja nach dem was du
            // für einen vergleich machst) ladest du die xml datei
            // pfad muss du richtig angeben
            location.replace("temp.xml");
           }

        // andernfalls führst du die transformation aus
          else
           {
            var xslDoc= new ActiveXObject("Msxml2.DOMDocument");
            xslDoc.async = false;
            //hier gibst du den pfad zu deiner xsl datei an
            xslDoc.load("temp.xsl");
            resultDoc.innerHTML = xmlDoc.transformNode(xslDoc);
           }
         }
          </script>
        </head>

        <body onload="init()" id="resultDoc">
        </body>
        </html>