Troca de tags

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Adelson.p
Usuário Nível 1
Usuário Nível 1
Mensagens: 16
Registrado em: 23 Mai 2012 06:56
Localização: Curitiba

Troca de tags

Mensagem por Adelson.p »

Bom dia :D

quero saber, como posso fazer troca de algumas tags, q estão dentro de alguns nós específicos, por exemplo:

Código: Selecionar todos

<noh id="1">
    <tag1>valor1</tag1>
    <tag2>valor2</tag2>
    <tag3>valor3</tag3>
    <tag4>valor4</tag4>
</noh>

<noh id="2">
    <tag1>valor1</tag1>
    <tag2>valor2</tag2>
    <tag3>valor3</tag3>
    <tag4>valor4</tag4>
</noh>
e eu quero fazer uma busca no XML, e fazer uma troca do valor da TAG 3 do nó de ID 2
Estou usando o xHarbour, mas, o meu código nao esta funcionando, tentei utilizar o substr, mas, minha idéia nao funcionou.

Agradeço a Ajuda
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

Troca de tags

Mensagem por Imatech »

Boa tarde !

Desculpe não lhe responder objetivamente...

Primeiro peço que estude os exemplos da pasta contrib do Harbour:
Ex:
\Harbour\contrib\xhb\tests\exemplos com xml

...


Após estará apto para manipular os dados que necessita... e poderá voltar e perguntar sobre outras duvidas sobre o como realizar essa tarefa...



Felicidades...
M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Adelson.p
Usuário Nível 1
Usuário Nível 1
Mensagens: 16
Registrado em: 23 Mai 2012 06:56
Localização: Curitiba

Troca de tags

Mensagem por Adelson.p »

Boa tarde.
Aquele exemplo, da leitura do xml, q tem os livros.. eu jah conheço muito bem, eu já consegui fazer a parte onde ele encontra tudo o local onde está e tudo mais, mas o meu problema, é na hora de fazer a troca, pois eu nao consigo fazer a troca da linha onde está a tag, por uma outra linha, com o novo valor.
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

Troca de tags

Mensagem por Imatech »

Blz... então já esta apto a manipular o XML utilizando das funções disponiveis...


1º Ler o XML completo (já atribuir o novo conteudo para a: tag3 quando encontrar o id = 2)...

Abaixo um pequeno esboço do que vai precisar...

Código: Selecionar todos


  LOCAL oDoc, oBook, oIterator, oCurrent
  LOCAL l_Condicao := .T.

  oDoc := TXmlDocument():New( MemoRead( c_Nome_do_Arquivo_XML ), HBXML_STYLE_NOESCAPE )
  oBook := oDoc:findfirst( "id" )
  oIterator := TXmlIterator():New( oBook )
  oCurrent := oIterator:Next()
  etc...
  If oCurrent:cName == 'id' .and oCurrent:cData == '2'
    etc... continua leitura
    If oCurrent:cName == 'tag3' 
      // pronto... atribui sua mudança...
      oCurrent:cData := c_Novo_Conteudo...
    endif
  endif
  etc...
  Grava XML com novo nome (ou substitui o existente)...

*** Adicionar os Loop's para a leitura de cada nivel (node) do XML



Sucesso...
M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Adelson.p
Usuário Nível 1
Usuário Nível 1
Mensagens: 16
Registrado em: 23 Mai 2012 06:56
Localização: Curitiba

Troca de tags

Mensagem por Adelson.p »

Certo, e para salvar esse novo XML, eu faço de que forma essa conversão ?

Código: Selecionar todos

oDoc:toString( ) ?
Mas, como eu faria para salvar com a nova informação ?
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

Troca de tags

Mensagem por Imatech »

Código: Selecionar todos


  LOCAL xAux := ''
  LOCAL nFileHandle := FCreate( c_Nome_a_salvar_xml )

  ...
  Leitura e tratamento do XML
  ...

  xAux := oDoc:write( nFileHandle, HBXML_STYLE_INDENT )
  xAux := FClose( nFileHandle )

M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Adelson.p
Usuário Nível 1
Usuário Nível 1
Mensagens: 16
Registrado em: 23 Mai 2012 06:56
Localização: Curitiba

Troca de tags

Mensagem por Adelson.p »

Bom, fiz a busca aqui, mas ele tah trocando só o do ID numero e nao a de numero 2 :/
quando eu depurei, ele só fez a alteração, quando ele chegou no nó de id 3 ;x
Adelson.p
Usuário Nível 1
Usuário Nível 1
Mensagens: 16
Registrado em: 23 Mai 2012 06:56
Localização: Curitiba

Troca de tags

Mensagem por Adelson.p »

Hummmmmmmm
Certo, encontrei meu erro....
Bom, pelo que eu notei, ele faz a contagem certinho dos ID's, mas, quando ele começa a verificar as TAGS, ele começa do ID 1 e nao do ID 3, como posso fazer para corrigir isso ?
Adelson.p
Usuário Nível 1
Usuário Nível 1
Mensagens: 16
Registrado em: 23 Mai 2012 06:56
Localização: Curitiba

Troca de tags

Mensagem por Adelson.p »

Certo, ja consegui arrumar (:
Agora está funcionando certinho, muito obrigado (:
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

Troca de tags

Mensagem por Imatech »

Isso ai... :)

Só faltavam os loop´'s


Sucesso...
M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Responder