sirve que para functions ejemplos desarrollo datos consultando con caracteristicas xml cross-platform msxml xslt

xml - para - xquery ejemplos



¿Cómo usar la función de conjunto de nodos de una manera independiente de la plataforma? (5)

Estoy escribiendo un archivo xlst que quiero usar en Linux y Windows. En este archivo utilizo la función de conjunto de nodos que 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?


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

Tal vez no sea exactamente la respuesta que estabas buscando, pero podría ser, dependiendo del contexto de tu problema. ;-)


Se supone que Exslt es un conjunto de extensiones xslt independiente de la plataforma, pero solo en la medida en que varios procesadores xslt decidan implementarlas.

Hay alguna evidencia de que MSXML realmente admite exsl: node-set (), pero no estoy seguro.

Hay un artículo antiguo que analiza una implementación de exslt sobre MSXML.

De lo contrario, creo que function-available () es tu amigo :)


Si no hay una razón en particular para usar la implementación de msxml del conjunto de nodos en Windows, puede usar exslt one en todas partes, incluyendo la implementación descargada de http://exslt.org con su hoja de estilo, de todos modos describe los pasos necesarios. Puede usar el modo "Espacios de nombres de extensión" o el modo "Plantillas nombradas".


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

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

Esta técnica fue descubierta por Julian Reschke y luego de publicarla en la lista xsl , fue publicitada por David Carlisle . En el blog de David Carlisle también hay un enlace a una página de prueba que muestra si la función common: node-set () así implementada funciona con el navegador de su elección.

Para resumir:

  1. Primero ve aquí y lee la explicación.
  2. Luego prueba la página de prueba. En particular, verifique que funcione con IE (eso significa con MSXML)
  3. Finalmente, usa el código.

¡Disfruta!


Puede usar la función function-available () para determinar qué función debe usar:

<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 ajustar esta lógica en una plantilla con nombre y llamarla con el conjunto de nodos como parámetro.