Jump to content


Photo

Puxar Dados De Um Xsl Via Php, é Possivel ?


  • Faça o login para participar
2 replies to this topic

#1 Tiago Marques

Tiago Marques

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Não informado

Posted 21/05/2009, 10:33

Bom dia amigos, eu estou com um problema.

Rodei a internet inteira e achei vários tutos, ensinando como gerar um XSLT via php. No caso, teriamos que ter um XML com os dados, e o arquivo PHP para ler o XML e gerar um XSL... esse tutorial tem vários na net...

Eu preciso do contrário, eu tenho um XML e XSL (eu fiz todinho da maneira que preciso). Agora preciso colocar código PHP dentro do XSL (quando eu faço isso o arquivo dá pau!)

Estou fazendo um mega questinario, com 120 questoes... eu queria externalizar as questões num arquivo XML! Formata-lo com XSL... e colocar as tags php dentro do XSL... XSL que vai ficar dentro do PHP (até aqui eu consegui)... mas quando eu coloco as TAGS php dentro do XSL ele não funciona... ele some!

Cheguei a conclusão que o XSL não aceita linguagem server-side.

Aguardo uma ajuda,
Muito obrigado amigos,
Tenham um bom dia!

:lol:

#2 bimonti

bimonti

    Super Veterano

  • Usuários
  • 2654 posts
  • Sexo:Masculino

Posted 27/05/2009, 02:30

É possível sim, mas você está tentando da forma errada. Coloca <?php ?> dentro do XSL vai dar erro mesmo já que o parser não entende isso. Você tem que definir todas as variáveis dentro do php e usar a função $foo-setParameter() para enviá-los ao XSL. Eu fiz isso a muuuuiiitoooo tempo atrás e não lembro exatamente a sintaxe. Abri aqui os arquivos mas eles são imensos e muitos complexos pra colar e você tentar entender então eu dei uma enxugada. Pode ser que não funcione mas você pelo menos saca a idéia.

PHP
// Load the XML source
			$xml = new DOMDocument( "1.0", "ISO-8859-1" );
			$xml->preserveWhiteSpace = false;
			$xml->formatOutput   = true;
			$xml->load('produtos/abc.xml');
			
			$xsl = new DOMDocument("1.0", "ISO-8859-1" );
			$xsl->preserveWhiteSpace = false;
			$xsl->formatOutput   = true;
			$xsl->load('produtos.xsl');
			
			// Configure the transformer
			$proc = new XSLTProcessor();
			$proc->importStyleSheet($xsl); // attach the xsl rules
			$proc->setParameter('','tempo',iconv("ISO-8859-1", "UTF-8",strftime('%A, %d/%m/%Y',strtotime('now'))));

			echo $proc->transformToXML($xml);

XSL
<xsl:template match="general" mode="indicar">
		 <dl>
			<dt>Enviada em:</dt>
			<dd><xsl:value-of select="$tempo" /></dd>
			<dt>De:</dt>
			<dd><span id="mail">xxx@xxx.com</span></dd>
		</dl>
</xsl:template>

Acho que dá pra entender. E como eu falei, copiar e colar não vai funcionar já que essa parte estava totalmente aninhada e relacionada a outro elementos. O que você precisa entender é que o php usa setParameter() para enviar e o XSL recebe isso como variável ($tempo).

Caso você queira usar essa variável dentro de algum parâmetro use colchetes:
<form action="{$path}indicar.php" method="post" onsubmit="post(this);return false;">

:click:
WebFórum - Equipe de Desenvolvimento - Monitor
Posted Image
Yeah I do have some stories, and it's true I want all the glory ...

#3 d1eg0.

d1eg0.

    Normal

  • Usuários
  • 63 posts
  • Sexo:Masculino

Posted 16/09/2010, 16:11

Esta dando um erro, no meu arquivo php


Fatal error: Class 'XSLTProcessor' not found in C:\wamp\www\teste\xsl\pagina.php on line 21


alguma dica?




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq