2008-09-18 12 views
11

Ich schreibe eine xlst-Datei, die ich unter Linux und Windows verwenden möchte. In dieser Datei verwende ich die Funktion node-set, die in verschiedenen Namespaces für MSXML und xsltproc ("urn: schemas-microsoft-com: xslt" bzw. "http://exslt.org/common") deklariert wurde. Gibt es eine plattformunabhängige Verwendung von node-set?Wie funktioniert die Knotensatzfunktion plattformunabhängig?

+0

Hallo, hier finden Sie meine Antwort, die die benötigten Informationen für eine einzige universelle Implementierung der Funktion xxx: node-set() liefert. Prost –

Antwort

1

Firefox 3 implementiert Knotenmenge (als Teil der EXSLT 2.0 Namensraum Verbesserungen) in seinem clientseitige XSLT-Verarbeitung.

Vielleicht nicht ganz Antwort, die Sie gesucht haben - aber es könnte sein, je nach Kontext des Problems. ;-)

7

können Sie die Funktion function-available() verwenden, um zu bestimmen, welche Funktion Sie verwenden sollten:

<xsl:choose> 
    <xsl:when test="function-available('exslt:node-set')"> 
    <xsl:apply-templates select="exslt:node-set($nodelist)" /> 
    </xsl:when> 
    <xsl:when test="function-available('msxsl:node-set')"> 
    <xsl:apply-templates select="msxsl:node-set($nodelist)" /> 
    </xsl:when> 
    <!-- etc --> 
</xsl:choose> 

Sie können sogar diese Logik in einer benannten Vorlage wickeln und mit dem nodeset als Aufruf Parameter.

3

Exslt ist angeblich ein plattformunabhängiger Satz von xslt-Erweiterungen, aber nur so weit, wie verschiedene xslt-Prozessoren sich dafür entscheiden, sie zu implementieren.

Es gibt some evidence, dass MSXML tatsächlich unterstützt exsl: node-set(), aber ich weiß es nicht sicher.

Es gibt eine old article diskutieren an implementation von Exslt auf MSXML.

Ansonsten denke ich, funktions vorhanden() ist dein Freund :)

0

Wenn es keinen besonderen Grund ist msxml Implementierung von Knotenmenge auf Windows verwenden Sie EXSLT man überall verwenden coul, durch die Implemenation einschließlich heruntergeladen von mit Ihrem Stylesheet, exslt howto beschreibt die erforderlichen Schritte. Sie können entweder "Extension-Namespaces" oder "Benannte Vorlagen" verwenden.

7

Ja, es ist eine gute und universelle Lösung.

EXSLT Die Funktion common:node-set() kann als Inline-Javascript-Funktion implementiert werden und steht somit mit jedem Browser zur Verfügung, der Javascript unterstützt (praktisch alle gängigen Browser ohne Ausnahme).

Diese Technik wurde erstmals von Julian Reschke entdeckt und nachdem er auf der xsl-list veröffentlicht wurde, wurde von David Carlisle veröffentlicht. Auf der blog of David Carlisle gibt es auch einen Link zu einer Testseite, die zeigt, ob die so implementierte common: node-set() -Funktion mit dem Browser Ihrer Wahl funktioniert.

Fassen wir zusammen:

  1. Erste here und lesen Sie die Erklärung gehen.
  2. Dann versuchen Sie die Testseite. Stellen Sie insbesondere sicher, dass es mit IE (das heißt mit MSXML) funktioniert
  3. Schließlich verwenden Sie den Code.

Genießen Sie!

Verwandte Themen