XML-Daten können mithilfe eines einfachen XSL-Stylesheets in HTML konvertiert werden. Da sich die XML-Spezifikation weiterentwickelt, scheint es notwendig zu sein, in neuen Versionen alle Anforderungen zu erfüllen. Leider war die Spezifikation immer von der Durchführung einfacher Transformationen betroffen.
Angenommen, ich verfüge über XML-Daten, die den Inhalt einer Seite darstellen, und möchte nun deren Inhalt in ein Layout konvertieren. Hier ist das XML, das ich konvertieren möchte:
Dieser Inhalt stellt eine Reihe von Ordnern, Dateien und Feldern dar. Jeder Ordner enthält Dateien und jede Datei enthält Felder zur Dateneingabe. Jeder Ordner in der Ordnergruppe wird durch ein TR-Element und ein TD-Element in der ersten Zeile einer TABLE dargestellt. Jede Datei in der Dateigruppe wird als TR-Element und TD-Element in der ersten Zeile eines TABLE-Elements dargestellt, das im Ordner-TR-Element verschachtelt ist. Jede Domäne in der Domänengruppe wird als INPUT in der zugehörigen Datei angezeigt.
Um diese Idee umzusetzen, müssen wir XML durchlaufen und eine Tabelle basierend auf XSL erstellen.
Hier ist das für diese Transformation verwendete XSL:
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:fn=" http://www.mycompany.com/mynamespace ">
Funktion getElementCount(nodelist, what) {
varrtrn = 0;
rtrn = nodelist[0].parentNode.selectNodes(what).length;
return (rtrn + 1); //1 wird für Füller TD hinzugefügt
}
Im Stylesheet-Tag richten wir mehrere Namespaces ein, darunter den XSL-Namespace, der alle XSL-Transformations-Tags definiert. msxml-Namespace, der es uns ermöglicht, Benutzerfunktionen zu erstellen, die in Stylesheets verwendet werden können. Ich verwende dies, um alle untergeordneten Elemente abzurufen, um ein COLSPAN-Attribut für ein TD-Tag festzulegen. Der fn-Namespace, der zum Verbinden einer Reihe benutzerdefinierter Funktionen verwendet wird, die vom msxml:script-Element erstellt wurden.
Dann erstellen wir die äußere TABLE und das erste TR. Im TR erstelle ich für jeden im XML angegebenen Ordner ein TD. Ich habe das xsl:element-Tag verwendet, weil es mir ermöglicht, benutzerdefinierte Attribute hinzuzufügen oder eine Funktion auszuführen, um eine Eigenschaft für das COLSPAN-Attribut in einem anderen TD-Element festzulegen.
Nachdem ich für jeden Ordner das erforderliche TD erstellt hatte, begann ich mit der Erstellung des TR für jeden Ordner. Ich füge diesem TR nur ein TD hinzu, aber ich setze sein COLSPAN-Attribut auf die Anzahl der Ordner-Tags in der Ordnergruppe plus eins. Das zusätzliche wird verwendet, um Leerzeichen in einer TABLE mit festem Layout zu füllen.
Um COLSPAN zu erhalten, übergebe ich den aktuellen Kontext (hier durch „.“ angegeben) und den Namen des Knotens, den ich berechnen möchte. In meiner Funktion erhalte ich den aktuellen Kontext, paraentNode und die Anzahl der in der XPath-Abfrage angegebenen Knoten. Die Funktion gibt dann diesen Betrag plus eins zurück, um den TD zu füllen.
Mit diesem TD bette ich darin eine weitere TABLE ein, die jede Datei in der Dateigruppe enthält. Ab diesem Zeitpunkt ist der Vorgang derselbe wie bei einer externen TABLE-Konvertierung. Der letzte Schritt besteht darin, die Felder in jeder Datei hinzuzufügen. Dieses Mal habe ich keine eingebettete TABELLE erstellt, sondern nur die Felder zum aktuellen TD hinzugefügt.
Sobald ich das allgemeine Layout fertiggestellt habe, kann ich mit dem Hinzufügen von Benutzeroberflächenfunktionen beginnen, z. B. dem Ausblenden anderer Ordner und Dateizeilen, bis der Benutzer auf die entsprechende Registerkarte klickt. Diese Funktionalität kann erreicht werden, indem man ein Skript schreibt, das diese Funktionalität unterstützt, ein onclick xsl:attribute-Element zu den Ordner- und Datei-TD-Elementen hinzufügt und dann seinen Wert auf den Namen der Skriptfunktion setzt.
Nachdem die allgemeine Funktionalität abgeschlossen ist, können Sie schließlich die Klasse xsl:attributes hinzufügen und die relevanten Klassennamen in STYLE oder CSS hinzufügen, um das gewünschte Aussehen zu erhalten.
Dieses Beispiel erstellt eine Grundlage für die Datei-Ordner-Feld-Ansicht, die bei der Bereitstellung von Webdatenlösungen verwendet wird. Besuchen Sie MSDN, um mehr über die XML-Spezifikation von Microsoft zu erfahren.