![]() |
Pasar variables de PHP a XSL Hola, no logro aclararme de como pasar una variable al XSL que lo llamo desde un archivo PHP. Mi intención es la de que el XSL interprete el XML y segun el valor de $tipo se ejecute un template u otro. Tengo 3 archivos: XML XSL - que interpreta el XML PHP - que lanza los 2 archivos anteriores: Codigo PHP: -------------------- <?php $tipo=$HTTP_GET_VARS['tipo']; $xml = new DomDocument; $xml->load('example.xml'); $xsl = new DomDocument; $xsl->load('example.xsl'); $proc = new xsltprocessor; $proc->importStyleSheet($xsl); $proc->setParameter("",'tipo',$tipo); echo $proc->transformToXML($xml); ?> ----------------------- Y quiero que el archivo PHP le pueda pasar la variable $tipo al XSL para que en funcion de lo que marque $tipo se vea una u otra cosa en el navegador. No me da error pero no sale nada, como si la variable estuviera vacía. El caso es que ya lo he visto antes pero no recuerdo donde ni como era. Muchas gracias |
tienes declarado el parametro en tu xsl con <xsl:param name="tipo" /> ?? |
Lo tengo declarado con with-param: Codigo XSL: ------------------- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="iso-8859-1" indent="no"/> <xsl:template match="collection"> Hey! Welcome to my sweet CD collection! <xsl:apply-templates select="cd"> <xsl:with-param name="valor"/><xsl:value-of select="$tipo"/> </xsl:with-param> </xsl:apply-template> </xsl:template> <xsl:template match="cd"> <h1><xsl:value-of select="$valor"/></h1> </xsl:template> </xsl:stylesheet> -------------------------------- Codigo XML: ------------------ <collection> <cd> <title>Titulo 1</title> <artist>Artista 1</artist> <year>2005</year> </cd> <cd> <title>Titulo 2</title> <artist>Artista 2</artist> <year>2005</year> </cd> </collection> ----------------------- Codigo PHP: --------------------- <?php $tipo=$HTTP_GET_VARS['tipo']; /* Load the two XML sources */ $xml = new DomDocument; // from /ext/dom $xml->load('example.xml'); $xsl = new DomDocument; $xsl->load('example.xsl'); /* Configure the transformer */ $proc = new xsltprocessor; $proc->importStyleSheet($xsl); // attach the xsl rules $proc->setParameter("",'tipo',$tipo); echo $proc->transformToXML($xml); // actual transformation ?> ------------------ |
OK, es correcto pero no es el parametro tipo lo que tienes declarado en tu XSL sino el parametro valor que es un aprametro que recibe el template "cd" cuyo valor lo lee del parametro "tipo" que no tienes declarado. Lo tienes que declarar al ppio de tu XSL con <xsl:param name="tipo" /> para que sea un parametro global. El codigo quedaria asi: Código: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">Suerte! |
Helbira, que placer verte por aquí :) (F) |
Vale, muchisimas gracias helbira, ahora si funciona, pero el problema es que en mi máquina no funciona, tengo Internet Inf Server con php5 y a mi no me va. ¿Por qué puede ser? Hago un phpinfo() y si que me sale, pero cuando lanzo este php me sale en blanco todo, ¿puede ser por alguna libreria .dll que no tengo bien puesta? ¿Hay que intalar php5 como cgi o como idapi? |
La verdad es que hace tiempo que no uso PHP en un IIS. Cuando lo instalé la última vez era PHP3 y no recuerdo exactamente si era como CGI o IDAPI. De tdas formas, recuerdo que seguí la instalación del archivo install.txt o algo asi paso a paso. Venía la forma de instalarlo según tu sistema operativo y versión del IIS. Busca en el foro de PHP, creo recordar haber respondido preguntas sobre esto y seguramente puse clarito los pasos a seguir. Por lo menos resolveras tu duda sobre el cgi/idapi. Mira tambien en la FAQ de PHP. Supongo que eso debe ser un tema candente en ese foro. |
Gracias, ya está resuelto, el problema estaba en el uso de register_globals=OFF (debía estar a ON) ya que no creaba un array $HTTP_GET_VARS['tipo'], para solucionarlo sin cambiar el valor de register_globals es mejor usar la variable $_GET['tipo']. |
| La zona horaria es GMT -6. Ahora son las 06:43. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.