2008-09-18 12 views
11

Estoy escribiendo un archivo xlst que quiero usar en Linux y Windows. En este archivo utilizo la función de conjunto de nodos que se declaró en diferentes espacios de nombres para MSXML y xsltproc ("urn: schemas-microsoft-com: xslt" y "http://exslt.org/common", respectivamente). ¿Hay alguna forma de plataforma independiente de usar el conjunto de nodos?¿Cómo usar la función de conjunto de nodos de una manera independiente de la plataforma?

+0

Hola Евгений, mira mi respuesta que proporciona la información necesaria para una única implementación universal de la función xxx: node-set(). Aclamaciones –

Respuesta

1

Firefox 3 implementa el conjunto de nodos (como parte de las mejoras al espacio de nombres EXSLT 2.0) en su procesamiento XSLT del lado del cliente.

Quizás no sea exactamente la respuesta que estaba buscando, pero podría ser, dependiendo del contexto de su problema. ;-)

7

Puede utilizar la función de función disponibles() para determinar qué función se debe utilizar:

<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> 

Incluso puede envolver esta lógica en una plantilla llamada y llamarlo con el conjunto de nodos como una parámetro.

3

Exslt se "supone que es" un conjunto independiente de la plataforma de extensiones de XSLT, pero sólo en la medida diversos procesadores XSLT eligen para ponerlas en práctica.

Hay some evidence que MSXML realmente admite exsl: node-set(), pero no estoy seguro.

Hay un old article discutiendo an implementation de exslt encima de MSXML.

De lo contrario, creo que la función-disponibles() es su amigo :)

0

Si no hay una razón particular para utilizar la aplicación msxml del conjunto de nodos en las ventanas que utiliza coul EXSLT uno en todas partes, incluyendo la implemenation descargado desde http://exslt.org con su hoja de estilo, exslt howto describe los pasos necesarios. Puede usar el modo "Espacios de nombres de extensión" o el modo "Plantillas nombradas".

7

Sí, hay una solución buena y universal.

EXSLT La función common:node-set() se puede implementar como una función Javascript en línea y, por lo tanto, está disponible con cualquier navegador compatible con Javascript (prácticamente todos los principales navegadores sin excepción).

Esta técnica se descubrió por primera vez por Julian Reschke y después de que lo publicó en el xsl-list, se publicitó por David Carlisle. En el blog of David Carlisle también hay un enlace a una página de prueba que muestra si la función common: node-set() implementada funciona con el navegador de su elección.

En resumen:

  1. primero Ir here y leer la explicación.
  2. Luego pruebe la página de prueba. En particular, verifique que funcione con IE (es decir, con MSXML)
  3. Finalmente, utilice el código.

Do enjoy!

Cuestiones relacionadas