Página 1 de 1

Modificar Xml

Enviado: 08 Abr 2011 14:36
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.

Modificar Xml

Enviado: 08 Abr 2011 17:22
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.

Modificar Xml

Enviado: 08 Abr 2011 17:41
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.

Re: Modificar Xml

Enviado: 11 Abr 2011 01:10
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" )
    ...