Modificar Xml

Fórum sobre desenvolvimento de software para atender as exigências da legislação fiscal e tributária (NFe, NFCe, NFSe, SPEED, Projeto ACBr, TEF, ECD, EFD, etc.)

Moderador: Moderadores

Avatar do usuário
Ricardo Sales Ribeiro
Usuário Nível 3
Usuário Nível 3
Mensagens: 279
Registrado em: 13 Jul 2004 18:06
Localização: Fortaleza-Ceara

Modificar Xml

Mensagem por Ricardo Sales Ribeiro »

OLá amigos
Boa Tarde

Gostaria de saber se tem alguma forma de alterar o xml diretamente na fonte.
É o seguinte, tenho um cliente q usa uma ferramente extra para gerar o xml, ele não usa o Emissor da Sefaz, então, neste layout do xml aparece uma linha com a logomarca logo na segunda linha do xml, e tem alguns clientes q não estão validando esse xml por causa dessa linha.

Como fazer para editar, e se é possivel editar para eu retirar essa linha de comando, q significa a logomarca.
Será q tem um editor especifico para xml?


Desde já agradeço a colaboração.
Ricardo Sales
Fortaleza-Ce
lodara53@yahoo.com.br
lodara53@hotmail.com
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Modificar Xml

Mensagem por Pablo César »

Não sei quanto ao aspecto fiscal se isso seria válido. Mas tecnicamente é possível sim, pois o XML é um arquivo texto, não é ? Então você poderia ler a linha onde contém essa tag ou esse logotipo e simplesmente gravaria o arquivo novamente sem a linha que deseja excluir. Sugiro fazer isso com as funções de baixo nível FREAD/FREADSTR/FWRITE/FCLOSE.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Modificar Xml

Mensagem por Pablo César »

Aliás sugiro de você abrir o arquivo xml ler-lo linha a linha e gravar as linhas em outro arquivo que não sejam as do logotipo. Grave em um arquivo temporário, depois feche o arquivo xml e copie encima do xml.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Modificar Xml

Mensagem por rochinha »

Amiguinho,

Um XML é composto de informações que são ladeadas por TAGs.

Uma TAG poderá conter um conteúdo qualquer, seja numero, string, etc.

As TAG geralmente precisam de um inicializador e um terminador, sendo que o terminador possui uma "/"(barra)

Exemplo:

Código: Selecionar todos

    ...
    <endereco>RUA DOS TESTES, 123</endereco>
    ...
As TAGs compõe cada elemento, um elemento pode ser simples ou complexo.

Simples:

Código: Selecionar todos

    ...
    <telefone>11-2233-4455</telefone>
    ...
Complexo:

Código: Selecionar todos

    ...
    <enderecamento>
           <rua>RUA DOS TESTES, 123</rua>
           <bairro>CENTRO</bairro>
           <telefone>11-2233-4455</telefone>
    </enderecamento>
    ...
Voce pode fazer a pesquisa de um elemento qualquer dentro do arquivo desde que saiba qual é o nome da TAG.

No seu caso voce pode trocar o conteúdo de um elemento usando funções de pesquisa de string:

Pegue o inicio de um elemento passando o conteúdo do XML:

Código: Selecionar todos

   LOCAL nPosIni := At( [<]+cTag+[>], cXML ) + len( [<]+cTag+[>] )
Pegue o final de um elemento passando o conteúdo do XML:

Código: Selecionar todos

   LOCAL nPosFim := At( [</]+cTag+[>], cXML )
Com base no posicionamento correto de inicio e fim do elemento processe uma troca de conteúdos ou do elemento inteiro:

Exemplo, voce deseja trocar o bairro CENTRO por CENTRAL. Processe um StrTran() parecido com este:

Código: Selecionar todos

  StrTran( cXML, "<bairro>CENTRO</bairro>", "<bairro>CENTRAL</bairro>" )
Ou:

Código: Selecionar todos

  StrTran( cXML, "< logoMarca>logo.bmp</logoMarca>", "< logoMarca></logoMarca>" )
Segue uma funçãozinha que pega um conteúdo de um elemento qualquer:

Código: Selecionar todos

function getXMLValue( cXML, cTAG )
   LOCAL nPosIni := At( [<]+cTag+[>], cXML ) + len( [<]+cTag+[>] )
   LOCAL nPosFim := At( [</]+cTag+[>], cXML )
   return substr( cXML, nPosIni, nPosFim-nPosIni )
Exemplo de uso:

Código: Selecionar todos

    ...
    cXML := MemoRead( "teste.xml" )
    ...
    ? getXMLValue( cXML, "logoMarca" )
    ...
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder