XML - envio de xpath mediante php a un xslt

 
Vista:

envio de xpath mediante php a un xslt

Publicado por malu (2 intervenciones) el 04/07/2009 19:22:28
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!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:envio de xpath mediante php a un xslt

Publicado por maluka (2 intervenciones) el 04/07/2009 21:21:23
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...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:envio de xpath mediante php a un xslt

Publicado por El Lobo (25 intervenciones) el 06/09/2010 19:55:46
Usar <xsl:param name="" />
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar