Foros del Web » Programación para mayores de 30 ;) » Programación General »

Pasar variables de PHP a XSL

Estas en el tema de Pasar variables de PHP a XSL en el foro de Programación General en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 15/06/2005, 12:01
 
Fecha de Ingreso: marzo-2005
Mensajes: 20
Antigüedad: 19 años, 1 mes
Puntos: 0
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
  #2 (permalink)  
Antiguo 16/06/2005, 02:44
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 22 años, 6 meses
Puntos: 5
tienes declarado el parametro en tu xsl con <xsl:param name="tipo" /> ??
__________________
BUSCO TELETRABAJO
Experiencia de mas de 4 años como desarrolladora web en PHP, ASP, XML, XSL, JavaScript, MySQL, PostGres, SQLServer, ...
  #3 (permalink)  
Antiguo 16/06/2005, 05:01
 
Fecha de Ingreso: marzo-2005
Mensajes: 20
Antigüedad: 19 años, 1 mes
Puntos: 0
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
?>
------------------
  #4 (permalink)  
Antiguo 16/06/2005, 05:19
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 22 años, 6 meses
Puntos: 5
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">
 <xsl:output method="html" encoding="iso-8859-1" indent="no"/>

<xsl:param name="tipo" />

 <xsl:template match="collection">
  Hey! Welcome to my sweet CD collection!
  <xsl:apply-templates select="cd">
	<xsl:with-param name="valor"/>
	</xsl:with-param>
  </xsl:apply-template>
	
 </xsl:template>
 <xsl:template match="cd">
	<h1>

 </xsl:template>
</xsl:stylesheet>
Y listo! Creo qeu con eso te funcionaria.

Suerte!
__________________
BUSCO TELETRABAJO
Experiencia de mas de 4 años como desarrolladora web en PHP, ASP, XML, XSL, JavaScript, MySQL, PostGres, SQLServer, ...
  #5 (permalink)  
Antiguo 16/06/2005, 08:57
Avatar de Barraca  
Fecha de Ingreso: octubre-2001
Ubicación: Dénia
Mensajes: 259
Antigüedad: 22 años, 6 meses
Puntos: 2
Helbira, que placer verte por aquí :) (F)
  #6 (permalink)  
Antiguo 16/06/2005, 11:25
 
Fecha de Ingreso: marzo-2005
Mensajes: 20
Antigüedad: 19 años, 1 mes
Puntos: 0
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?
  #7 (permalink)  
Antiguo 17/06/2005, 01:36
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 22 años, 6 meses
Puntos: 5
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.
__________________
BUSCO TELETRABAJO
Experiencia de mas de 4 años como desarrolladora web en PHP, ASP, XML, XSL, JavaScript, MySQL, PostGres, SQLServer, ...
  #8 (permalink)  
Antiguo 20/06/2005, 11:33
 
Fecha de Ingreso: marzo-2005
Mensajes: 20
Antigüedad: 19 años, 1 mes
Puntos: 0
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'].
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:48.