Categorías destacadas
programacion php    
Lista de foros

enviar xpath mediante php a xslt


maluka
04 de Julio del 2009

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!


maluka
04 de Julio del 2009

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...

 
BBDD
Entornos de desarrollo
Entretenimiento
Herramientas
Internet
Lenguajes de script
Lenguajes imperativos
Lenguajes orientados a objeto
Otros lenguajes
Plataformas
Teoría
Varios
Copyright © 1998-2011 Programación en Castellano. Todos los derechos reservados
Datos legales | Politica de privacidad | Contacte con nosotros | Publicidad

Diseño web y desarrollo web. Un proyecto de los hermanos Carrero.

Red internet:
Juegos gratis | Servidores dedicados
Más internet: Password | Directorio de weblogs | Favicon