Página 1 de 1
Troca de tags
Enviado: 05 Jun 2012 11:10
por Adelson.p
Bom dia
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
Troca de tags
Enviado: 05 Jun 2012 13:47
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...
Troca de tags
Enviado: 05 Jun 2012 14:45
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.
Troca de tags
Enviado: 05 Jun 2012 17:10
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...
Troca de tags
Enviado: 05 Jun 2012 17:18
por Adelson.p
Certo, e para salvar esse novo XML, eu faço de que forma essa conversão ?
Mas, como eu faria para salvar com a nova informação ?
Troca de tags
Enviado: 05 Jun 2012 17:25
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 )
Troca de tags
Enviado: 05 Jun 2012 17:40
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
Troca de tags
Enviado: 05 Jun 2012 17:46
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 ?
Troca de tags
Enviado: 05 Jun 2012 17:53
por Adelson.p
Certo, ja consegui arrumar (:
Agora está funcionando certinho, muito obrigado (:
Troca de tags
Enviado: 05 Jun 2012 18:20
por Imatech
Isso ai...
Só faltavam os loop´'s
Sucesso...