XSLT - Auf dem Client


Wenn Ihr Browser XSLT unterstützt, kann es im Browser verwendet werden, um Dokumente in XHTML umzuwandeln.


JavaScript-Lösung

In den vorherigen Kapiteln haben wir erklärt, wie man XSLT verwendet, um ein XML-Dokument in XHTML umzuwandeln. Wir haben dies erreicht, indem wir der XML-Datei ein XSL-Stylesheet hinzugefügt und die Konvertierung über den Browser durchgeführt haben.

Obwohl diese Methode gut funktioniert, ist das Hinzufügen einer Stylesheet-Referenz zur XML-Datei nicht immer zufriedenstellend (zum Beispiel funktioniert diese Methode nicht in Browsern, die XSLT nicht erkennen).

Ein vielseitigerer Ansatz ist die Verwendung von JavaScript, um die Konvertierung durchzuführen.

Durch die Verwendung von JavaScript können wir:

  • Browser-Erkennungstests durchführen
  • Verwenden Sie verschiedene Stylesheets basierend auf Browser und Benutzerbedürfnissen

Das ist die Schönheit von XSLT! Eines der Entwurfsziele von XSLT war es, die Transformation von Daten von einem Format in ein anderes zu ermöglichen und dabei verschiedene Arten von Browsern und unterschiedliche Benutzerbedürfnisse zu unterstützen.

Clientseitige XSLT-Transformation wird in Zukunft mit Sicherheit zu einer der Hauptaufgaben werden, die von Browsern ausgeführt werden, und wir werden auch ihr Wachstum in spezifischen Browsermärkten sehen (Braille, akustische Browser, Webdrucker, Handheld-Geräte und so weiter).


XML-Dateien und XSL-Dateien

Betrachten Sie das XML-Dokument, das bereits in einem vorherigen Kapitel gezeigt wurde:

Beispiele

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
.
.
</catalog>

XML-Datei anzeigen。

Und das zugehörige XSL-Stylesheet:

Beispiele

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
  <h2>Meine CD-Sammlung</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th style="text-align:left">Titel</th>
      <th style="text-align:left">Künstler</th>
    </tr>
    <xsl:for-each select="catalog/cd">
    <tr>
      <td><xsl:value-of select="title"/></td>
      <td><xsl:value-of select="artist"/></td>
    </tr>
    </xsl:for-each>
  </table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

XSL-Datei anzeigen。

Beachten Sie, dass diese XML-Datei keinen Verweis auf die XSL-Datei enthält.

Wichtig:Die obige Aussage bedeutet, dass die XML-Datei mit mehreren verschiedenen XSL-Stylesheets transformiert werden kann.

Hinweis: Stellen Sie sicher, dass die XSL-Datei über den Link im Browser korrekt geöffnet werden kann, wie unten gezeigt:

Andernfalls können Fehler auftretenUncaught TypeError: Failed to execute 'importStylesheet' on 'XSLTProcessor': parameter 1 is not of type 'Node'.。


XML im Browser in XHTML konvertieren

Dies ist der Quellcode, mit dem die XML-Datei auf dem Client in XHTML konvertiert wird:

Beispiele

<!DOCTYPE html> <html> <head> <script>
function loadXMLDoc(filename) { if (window.ActiveXObject) { xhttp = new ActiveXObject("Msxml2.XMLHTTP"); } else { xhttp = new XMLHttpRequest(); } xhttp.open("GET", filename, false); try { xhttp.responseType = "msxml-document" } catch (err) {} // Unterstützung für IE11 xhttp.send(""); return xhttp.responseXML; } function displayResult() { xml = loadXMLDoc("cdcatalog.xml"); xsl = loadXMLDoc("cdcatalog.xsl"); // Code für IE if (window.ActiveXObject || xhttp.responseType == "msxml-document") { ex = xml.transformNode(xsl); document.getElementById("example").innerHTML = ex; } // Code für Chrome, Firefox, Opera usw. else if (document.implementation && document.implementation.createDocument) { xsltProcessor = new XSLTProcessor(); xsltProcessor.importStylesheet(xsl); resultDocument = xsltProcessor.transformToFragment(xml, document); document.getElementById("example").appendChild(resultDocument); } }
</script> </head> <body onload="displayResult()"> <div id="example" /> </body> </html>

Selbst ausprobieren »

Tipp:Wenn Sie nicht wissen, wie man JavaScript schreibt, lesen Sie bitte unserJavaScript-Tutorial。

Beispielerklärung:

Die loadXMLDoc()-Funktion

Die loadXMLDoc()-Funktion wird verwendet, um die XML- und XSL-Dateien zu laden.

Sie prüft den Browsertyp des Benutzers und lädt die Datei.

Die displayResult()-Funktion

Diese Funktion wird verwendet, um die durch die XSL-Datei formatierte XML-Datei anzuzeigen.

  • XML- und XSL-Dateien laden
  • Browsertyp des Benutzers testen
  • Wenn der Browser des Benutzers ActiveX-Objekte unterstützt:
    • Verwenden Sie die Methode transformNode(), um das XSL-Stylesheet auf das XML-Dokument anzuwenden
    • Legen Sie den body des aktuellen Dokuments (id="example") so fest, dass er das XML-Dokument mit angewendetem Stylesheet enthält
  • Wenn der Browser des Benutzers keine ActiveX-Objekte unterstützt:
    • Erstellen Sie ein neues XSLTProcessor-Objekt und importieren Sie die XSL-Datei
    • Verwenden Sie die Methode transformToFragment(), um das XSL-Stylesheet auf das XML-Dokument anzuwenden
    • Legen Sie den body des aktuellen Dokuments (id="example") so fest, dass er das XML-Dokument mit angewendetem Stylesheet enthält

Andere Erweiterungen