Voltar   OpenNFSe > Programação > Ajuda sobre código fonte
Stats Comunidade Calendário Postados Hoje Pesquisar

Resposta
 
LinkBack Ferramentas do Tópico Modos de Exibição

 
  #1 (permalink)  
Antigo 13/12/2009
Avatar de LuizVaz
Administrator
Super Admin
Points: 10,505, Level: 68 Points: 10,505, Level: 68 Points: 10,505, Level: 68
Activity: 0% Activity: 0% Activity: 0%
Last Achievements
 
Registrado em: Oct 2009
Localização: Belo Horizonte
Posts: 86
Thanks: 2
Thanked 6 Times in 6 Posts
Activity Longevity
0/20 20/20
Today Posts
sssssss86
Enviar mensagem via Windows Live Messenger para LuizVaz Enviar mensagem via Yahoo para LuizVaz
Talking XSLT, XPATH e NFSe

Prezados,

ainda não encontrei em local algum alguém mencionando esse artificio.

Para quem não sabe, os Browsers tem a capacidade de aplicar um StyleSheet aos XML's assim como fazem com .CSS e .HTML.

Essa funcionalidade é possível graças ao XPATH.
O XPATH é uma sintaxe de pesquisa do elementos do XML.
E funciona para qualquer membro da família XHTML também.

Um stylesheet é informado no XML usando a sintaxe abaixo:
Código:
<?xml version='1.0' encoding='ISO-8859-1'?>
<?xml-stylesheet type="text/xsl" href="nfse.xsl"?>
<GerarNfseResposta xmlns="http://www.abrasf.org.br/nfse.xsd">
...
</GerarNfseResposta>
Atualmente a PBH cometeu um engano em colocar UTF-8 no cabeçalho.
Isso causa erro na maioria dos Browsers, pois existem caracteres ISO-8859 no texto.
Como o XML é restrito, o browser não permite enganos.

Isso torna o abaixo XML não amigável, por causa dos acentos:
Código:
<?xml version='1.0' encoding='UTF-8'?>
<GerarNfseResposta xmlns="http://www.abrasf.org.br/nfse.xsd">
...
<OutrasInformacoes>NFS-e gerada em ambiente de teste. NÃO TEM VALOR JURÍDICO NEM FISCAL.</OutrasInformacoes>
...
</GerarNfseResposta>
O arquivo ainda incompleto para download está aqui:
http://www.mediafire.com/file/zt42z42zzzo/nfse_xsl.zip

Com esse arquivo você pode entender o funcionamento e adaptar para sua necessidade.

Att,
Luiz Vaz
Responder com Citação

 
  #2 (permalink)  
Antigo 13/12/2009
Avatar de LuizVaz
Administrator
Super Admin
Points: 10,505, Level: 68 Points: 10,505, Level: 68 Points: 10,505, Level: 68
Activity: 0% Activity: 0% Activity: 0%
Last Achievements
 
Registrado em: Oct 2009
Localização: Belo Horizonte
Posts: 86
Thanks: 2
Thanked 6 Times in 6 Posts
Activity Longevity
0/20 20/20
Today Posts
sssssss86
Enviar mensagem via Windows Live Messenger para LuizVaz Enviar mensagem via Yahoo para LuizVaz
Padrão

Opa,

Esqueci de mencionar que a grande sacada é que o NFSE possui um namespace declarado como:
xmlns="http://www.abrasf.org.br/nfse.xsd"

Isso faz com que você tenha que definir no XSLT esse namespace para poder encontrar os elementos.
A definição é simplesmente assim:
xmlns:a="http://www.abrasf.org.br/nfse.xsd"

Usando esse namespace "a:" você pode encontrar os elementos no XML assim:
<xsl:template match="a:GerarNfseResposta">
<xsl:apply-templates select="a:ListaNfse/a:CompNfse/a:Nfse/a:InfNfse" />
</xsl:template>


Aqui estão algumas fontes sobre XSLT e XPATH:
Responder com Citação

 
  #3 (permalink)  
Antigo 15/12/2009
Avatar de LuizVaz
Administrator
Super Admin
Points: 10,505, Level: 68 Points: 10,505, Level: 68 Points: 10,505, Level: 68
Activity: 0% Activity: 0% Activity: 0%
Last Achievements
 
Registrado em: Oct 2009
Localização: Belo Horizonte
Posts: 86
Thanks: 2
Thanked 6 Times in 6 Posts
Activity Longevity
0/20 20/20
Today Posts
sssssss86
Enviar mensagem via Windows Live Messenger para LuizVaz Enviar mensagem via Yahoo para LuizVaz
Thumbs up

Pessoal,

com o código abaixo consegui aplicar o XSL dinamicamente no XML usando PHP.
São menos de 50 linhas de código.
O resto está todo no XML e XSL.

Código:
  # print.php?u=$1&n=$2&v=$3
  # u = CNPJ
  # n = NF (ANO/NOTA)
  # v = Verificador
  # File Path CNPJ/ANO/NOTA-Verificador.xml

  $d = dirname(__FILE__);
  $u = $y = $s = $v = '';

  if(!empty($_GET['u'])){
    $u = $_GET['u'];
  }
  if(!empty($_GET['n'])){
    $y = substr($_GET['n'], 0, 4)+0;
    $s = substr($_GET['n'], 4)+0;
  }
  if(!empty($_GET['v'])){
    $v = strtolower($_GET['v']);
  }

  $f = "$d/$u/$y/$s-$v.xml";
  $x = "$d/$u/nfse.xsl";

  if (file_exists($f)){
      // Carrega o XML e o XSL
      $xml = new DOMDocument;
      $xml->load($f);
      $xsl = new DOMDocument;
      $xsl->load($x);

      // Configura o transformer
      $proc = new XSLTProcessor;
      $proc->importStyleSheet($xsl);

      // Aplica o StyleSheet
      $html  = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'."\n";
      $html .= $proc->transformToXML($xml);
      $html  = str_replace('<?xml version="1.0"?>', '', $html);
      print $html;
  }
  else{
      print "Nota Fiscal Inexistente!";
  }

Lembrando que, o arquivo XML da NFSe está com Encoding UTF-8.
Isso está errado, pois a NFSe vem com caracteres ISO-8859-1 no corpo.
Portanto, façam a troca de UTF-8 para ISO-8859-1 antes chamarem as funções no PHP.
Caso contrário, receberão alguns warnings na execução.

Abaixo um Link de exemplo:
:: NFS-e - Nota Fiscal de Serviços eletrônica ::

Att,
Luiz Vaz
Responder com Citação

 
  #4 (permalink)  
Antigo 13/08/2010
Avatar de LuizVaz
Administrator
Super Admin
Points: 10,505, Level: 68 Points: 10,505, Level: 68 Points: 10,505, Level: 68
Activity: 0% Activity: 0% Activity: 0%
Last Achievements
 
Registrado em: Oct 2009
Localização: Belo Horizonte
Posts: 86
Thanks: 2
Thanked 6 Times in 6 Posts
Activity Longevity
0/20 20/20
Today Posts
sssssss86
Enviar mensagem via Windows Live Messenger para LuizVaz Enviar mensagem via Yahoo para LuizVaz
Padrão

Para quem deseja dar uma olhada no código, segue em anexo o xml stylesheet.

O stylesheet é o nfse.xml.
Os demais arquivos são usados como informação dos campos:
CNAE (Atividade), SUBCNAE (Sub-Atividade), REGIME TRIBUTÁRIO, IBGE (Cidades).

Att,
Luiz Vaz
Arquivos Anexados
Tipo de Arquivo: xml nfse.xml (37.2 KB, 11 visualizações)
Tipo de Arquivo: xml ibge.xml (215.3 KB, 5 visualizações)
Tipo de Arquivo: xml subcnae.xml (23.4 KB, 5 visualizações)
Tipo de Arquivo: xml regtrib.xml (358 Bytes, 5 visualizações)
Tipo de Arquivo: xml natoper.xml (364 Bytes, 5 visualizações)
Responder com Citação
Resposta

Tags
nfse, xpath, xslt


Regras para Posts
Você não pode postar novos tópicos
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar seus posts

Código [IMG] Sim
Código HTML Não
Trackbacks are Sim
Pingbacks are Sim
Refbacks are Sim



Horários baseados na GMT -2. Agora são 20:20.



vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.3.0