Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Daniel Lemes

Expressões Regulares e XML

Recommended Posts

Olá,

 

nunca fui muito bom em expressoes regulares e agora precisava remover os espaços entre as tags, tabs e quebras de linhas em um XML alguém pode me ajudar ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

to fazendo, mas quero ter a opção de receber um XML por parâmetro.

a solução do renato eu havia pensado, porém ela não retira o espaço entre as tags.

Compartilhar este post


Link para o post
Compartilhar em outros sites

to fazendo, mas quero ter a opção..

nao entendi..

está fazendo o quê ?

 

 

quero ter a opção de receber um XML por parâmetro

??

Compartilhar este post


Link para o post
Compartilhar em outros sites

eheheh, to montando o XML, ai monto certinho, se espaços entre as tags, tabs ou quebras de linha.

Porem quero receber esse XML como parametro e ai preciso retirar esses espaços, tabs e quebras de linha.

 

ABraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por qual motivo?

Pq tem como você ler o XML.. ai você não precisa retirar os espaços, tags e quebras de linha..

 

Sabe manipular um XML ?

http://br.php.net/simplexml

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não cara é uma NFe(nota Fiscal Eletrônica) ai eu to enviando ela e no manual do sefaz diz que tem que ser retirados os espaços, tabs e quebras de linhas do arquivo, apenas isso, entaão eu quero ler e fazer isso antes de enviar pro webservice, entendeu ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, nesse caso, ao invés de usar

$var = str_replace("\t","",$var);

$var = str_replace("\n","",$var);

 

 

use

$var = str_replace(TAB,"",$var);
no lugar de "TAB" pressione a tecla tab entre duas aspas

 

$var = str_replace(PHP_EOL,"",$var);

PHP_EOL é uma constante mágica.

o problema no uso do retorno de carro é que depende do sistema operacional onde executa o script.

a constante mágica retorna o caracter adequado para o sistema operacional.

 

 

se não funcionar, preste atenção ao encode do arquivo que está sendo lido.

o script do PHP que faz a leitura do arquivo deve estar com o mesmo encoding

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu hinom ,

 

Mas isso resolveria parte do meu problema, porque eu preciso retirar o espaço entre as tags também.

assim eu consigo remover as tabs e quebras de linha

$xml = preg_replace('/[\n\r\t]/', '', $xml);

agora só falta remover o espaços entre as tags.

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

não seria a solução né

Eu tenho palavras que devem continuar com espaços

o que eu quero é remover espaço entre as tags XML

tipo

<cUF>35</cUF>	  <cNF>518005127</cNF>	  <natOp>Venda a vista</natOp>	<indPag>0</indPag>
	  <mod>55</mod>   <serie>1</serie>  <nNF>1</nNF>  <dEmi>2008-05-06</dEmi>	<dSaiEnt>2008-05-06</dSaiEnt>   <tpNF>0</tpNF>   <cMunFG>3550308</cMunFG>   <tpImp>1</tpImp>	<tpEmis>1</tpEmis>	 <cDV>3</cDV>	 <tpAmb>2</tpAmb>	 <finNFe>1</finNFe>	<procEmi>0</procEmi>
	  <verProc>NF-eletronica.com</verProc>  </ide>
o objetivo é remover os espaços entre as tags, tua solução me traria uma das tags assim <natOp>Vendaavista</natOp>

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por qual motivo?

Pq tem como você ler o XML.. ai você não precisa retirar os espaços, tags e quebras de linha..

 

Sabe manipular um XML ?

http://br.php.net/simplexml

Seria bem mais simples.

Varre o documento pelo DOM, pegando os valores, concatenando numa variável, e depois passa o teu parâmetro.

Tô achando besteira, você se matar pra remover espaços e tags... se dá pra acessar diretamente apenas o conteudo do XML, usando funções prontas do php. http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

William

 

Eu sei acessar o XML, inclusive uso as funções da simplexml

O que acontece é que eu recebo um XML pronto, identado e com quebras de linha.

preciso enviar esse XML para o WS do sefaz, eles exigem que esse XML não tenha espaço entre as tags, quebras de linhas e tabulações.

Tu acha mais fácil/rápido/melhor performance eu varrer esse arquivo e recria-lo ?

Sendo que o arquivo pode ter algumas milhares de linhas ? porque ele pode ser 1 NFe ou um Lote de até 100 NFe.

 

Entendeu agora?

Compartilhar este post


Link para o post
Compartilhar em outros sites

2 opções (eu faria a segunda em primeira instância)

 

 

1.

se quiser continuar com isso, faça o que o William sugeriu,

 

quebre todas as tags e mapeie um por um removendo espaços somente os espaços fora das tags

 

2.

negocie com o outro lado, pois um documento XML possui um formato internacionalizado e segundo as exigÇencias que pedem, provavemente não sabem lidar com documentos XML, por isso estão exigindo coisas desnecessárias.

 

obs: não argumente dessa forma, procure palavras mais amenas, que não afete os interesses de seus parceiros comerciais., mas que entre de acordo com seus interesses.

nem tudo é apenas programação, procure saber negociar, pois pelo visto estão jogando maior parte do serviço nas suas costas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

porque você nao tenta isso:

 

<?php
$xml = file_get_contents("teste.xml");
$doc = new DOMDocument();
$doc->formatOutput = false;
$doc->preserveWhiteSpace = false;
$doc->loadXML($xml);
echo $doc->saveXML();
?>

 

sempre que precisei remover espaços entre tags o metodo preserveWhiteSpace sempre resolveu meu problema

e o formatOutput tbm

Compartilhar este post


Link para o post
Compartilhar em outros sites

hinom o "outro lado" é o governo receita federal, nunca iriam me ouvir.

Fábyo, cheguei a dar uma olhada por cima ontem, mas ainda não tive tempo de testar, hoje vi tua resposta e acho que vou realmente fazer um teste.

 

valew

Compartilhar este post


Link para o post
Compartilhar em outros sites

Conseguiu resolver o problema Daniel?

 

Estou com o mesmo e já procurei solução junto aos posts mas não obtive sucesso.

 

00130</CNPJ><xNo
me>PREMOLDADOS DE
Esse é o meu problema no XML, além da quebra na tag ele ainda dá espaço.
Se alguém tiver alguma solução ficarei grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites


// Remove espaços em branco quebra de linha e tab entre as tags do xml

$xml = preg_replace('/>[\s\t\n]{1,}</msi', '><', $xml);

 

 

//Remove quebra de linha e tab de qualquer lugar (pode ser usado para tratar dentro das tags.

$xml = preg_replace('/[\n\t]/msi', '', $xml);

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.