enviar xpath mediante php a xslt
Hola!
Me gustaria saber como se puede pasar un xpath mediante una variable php a un xslt. El codigo que tengo es el siguiente:
ARCHIVO PHP:
<?php
ob_start();
$xml = "nombres.xml";
$xslt = "nombres.xsl";
$xsl = new DomDocument();
$inputdom = new DomDocument();
$xsl->load($xslt);
$inputdom->load($xml);
$proc = new XsltProcessor();
$proc->registerPhpFunctions();
$xsl = $proc->importStylesheet($xsl);
//$tipo=nombre[contains(.//castellano,'Abar')] //Este es el xpath que quiero pasar y no consigo hacerlo
//$proc->setParameter("",'tipo',$tipo);
$newdom = $proc->transformToDoc($inputdom);
print $newdom->saveXML();
ob_end_flush();
?>
ejemplo de archivo nombres.xml:
<nombres>
<nombre>
<castellano>XXX</castellano>
<sexo>G</sexo>
<idiomas>
<ingles>XXX</ingles>
</idiomas>
<idiomas>
<frances>XXX</frances>
</idiomas>
</nombre>
</nombres>
ARCHIVO XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:template match="/nombres">
<html>
<head>
</head>
<body>
<table border ="1">
<tr>
<td> Castellano </td><td> Sexo</td><td> Ingles </td> <td> Frances</td>
</tr>
<xsl:apply-templates select="nombre[contains(.//castellano,'XXX')] ">
QUIERO PARAMETRIZAR ESTA LINEA PARA PODER HACER DIFERENTES BUSQUEDAS
</xsl:apply-templates>
<br/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="nombre">
<tr>
<xsl:for-each select=".">
<xsl:if test="castellano">
<td><xsl:value-of select="castellano" /> </td>
</xsl:if>
<xsl:if test="sexo">
<xsl:apply-templates select="sexo" />
</xsl:if>
<xsl:if test="idiomas">
<xsl:for-each select="child::*">
<xsl:if test="ingles">
<td><xsl:value-of select="ingles"/> </td>
</xsl:if>
<xsl:if test="frances">
<td><xsl:value-of select="frances" /> </td>
</xsl:if>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</tr>
</xsl:template>
<xsl:template match="sexo">
<xsl:if test=" . = 'V'">
<td><xsl:text>Varon</xsl:text></td>
</xsl:if>
<xsl:if test=" . = 'M'">
<td><xsl:text>Mujer</xsl:text></td>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Estos archivos como estan funcionan, lo que quiero es parametrizar ese xpath para poder realizar busquedas con diferentes nombres, o realizar un listado de todos los nombres de chicos ...
AgradecerÃa cualquier sugerencia, gracias!
Me gustaria saber como se puede pasar un xpath mediante una variable php a un xslt. El codigo que tengo es el siguiente:
ARCHIVO PHP:
<?php
ob_start();
$xml = "nombres.xml";
$xslt = "nombres.xsl";
$xsl = new DomDocument();
$inputdom = new DomDocument();
$xsl->load($xslt);
$inputdom->load($xml);
$proc = new XsltProcessor();
$proc->registerPhpFunctions();
$xsl = $proc->importStylesheet($xsl);
//$tipo=nombre[contains(.//castellano,'Abar')] //Este es el xpath que quiero pasar y no consigo hacerlo
//$proc->setParameter("",'tipo',$tipo);
$newdom = $proc->transformToDoc($inputdom);
print $newdom->saveXML();
ob_end_flush();
?>
ejemplo de archivo nombres.xml:
<nombres>
<nombre>
<castellano>XXX</castellano>
<sexo>G</sexo>
<idiomas>
<ingles>XXX</ingles>
</idiomas>
<idiomas>
<frances>XXX</frances>
</idiomas>
</nombre>
</nombres>
ARCHIVO XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:template match="/nombres">
<html>
<head>
</head>
<body>
<table border ="1">
<tr>
<td> Castellano </td><td> Sexo</td><td> Ingles </td> <td> Frances</td>
</tr>
<xsl:apply-templates select="nombre[contains(.//castellano,'XXX')] ">
QUIERO PARAMETRIZAR ESTA LINEA PARA PODER HACER DIFERENTES BUSQUEDAS
</xsl:apply-templates>
<br/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="nombre">
<tr>
<xsl:for-each select=".">
<xsl:if test="castellano">
<td><xsl:value-of select="castellano" /> </td>
</xsl:if>
<xsl:if test="sexo">
<xsl:apply-templates select="sexo" />
</xsl:if>
<xsl:if test="idiomas">
<xsl:for-each select="child::*">
<xsl:if test="ingles">
<td><xsl:value-of select="ingles"/> </td>
</xsl:if>
<xsl:if test="frances">
<td><xsl:value-of select="frances" /> </td>
</xsl:if>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</tr>
</xsl:template>
<xsl:template match="sexo">
<xsl:if test=" . = 'V'">
<td><xsl:text>Varon</xsl:text></td>
</xsl:if>
<xsl:if test=" . = 'M'">
<td><xsl:text>Mujer</xsl:text></td>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Estos archivos como estan funcionan, lo que quiero es parametrizar ese xpath para poder realizar busquedas con diferentes nombres, o realizar un listado de todos los nombres de chicos ...
AgradecerÃa cualquier sugerencia, gracias!
Lo unico que he conseguido hacer es parametrizar el nombre añadiendo las siguientes lineas:
En el php, despues de esta linea $xsl = $proc->importStylesheet($xsl);
incluyo:
$palabra='Abar';
$proc->setParameter("",'buscar',$palabra);
Los siguientes son intentos fustrados que no funcionan para poner en el select del template
//$a='Abar';
//$a="'".$a."'";
//$palabra='nombre[contains(.//castellano,'.$a .')]';
//$palabra='"'.$palabra.'"';
En el xsl incluyo:
<xsl:param name="buscar" />
<xsl:apply-templates select="nombre[contains(.//castellano,$buscar)] "/>
LO UNICO QUE HE CONSEGIDO HACER! Por fa si alguien sabe como hacerlo...
En el php, despues de esta linea $xsl = $proc->importStylesheet($xsl);
incluyo:
$palabra='Abar';
$proc->setParameter("",'buscar',$palabra);
Los siguientes son intentos fustrados que no funcionan para poner en el select del template
//$a='Abar';
//$a="'".$a."'";
//$palabra='nombre[contains(.//castellano,'.$a .')]';
//$palabra='"'.$palabra.'"';
En el xsl incluyo:
<xsl:param name="buscar" />
<xsl:apply-templates select="nombre[contains(.//castellano,$buscar)] "/>
LO UNICO QUE HE CONSEGIDO HACER! Por fa si alguien sabe como hacerlo...