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


0