Page 1 of 1
xmlIter doubt
Posted: Tue Jun 03, 2014 5:27 pm
by Wanderson
Hi, I have a xml search:
xmlNode := xmlIter:Find('xCpl')
Compl_Rem := xmlNode:cData
If not found xCpl in xml file my program hangs. How I can avoid this?
Thanks in advance.
Re: xmlIter doubt
Posted: Tue Jun 03, 2014 5:47 pm
by karinha
Re: xmlIter doubt
Posted: Tue Jun 03, 2014 6:42 pm
by Wanderson
Olá karinha,
No meu caso eu já busco direto o nodo que quero do xml (preciso de alguns somente) o exemplo que vc mostrou ele vai pro início e vai lendo linha a linha, no meu caso dou um find direto, gostaria de interceptar o resultado pra ver se achou pq se não acha o nodo dá erro no xmlNode:cData.
Obrigado.
Wanderson.
Re: xmlIter doubt
Posted: Tue Jun 03, 2014 7:51 pm
by karinha
Algo assim Wanderson?
Code: Select all
#include "FiveWin.ch"
#include "fileio.ch"
#include "hbxml.ch"
FUNCTION Main()
LOCAL hFile, cXml, cFileName:="TEST.XML"
LOCAL xmlDoc, xmlIter , xmlNode, cNode, cAttrib, cValue, oCampo, oConteudo
IF .NOT. FILE( cFileName )
MsgInfo( "Arquivo Não Encontrado !!!","Atenção" ) // nome do arquivo
cFileName := cGetFile( "XML File (*.Xml)|*.Xml|","Selecione arquivo XML da NFe ",curdir())
IF .NOT. FILE( cFileName )
RETURN NIL
ENDIF
ENDIF
cNode := NIL
cAttrib := NIL
cValue := NIL
hFile := FOpen( cFileName )
xmlDoc := TXmlDocument():New( hFile )
IF xmlDoc:nStatus != HBXML_STATUS_OK
Msginfo( "Erro ao Ler Arquivo .XML" )
RETURN NIL
ENDIF
xmlIter := TXmlIterator():New( xmlDoc:oRoot )
xmlNode := xmlIter:Find()
DO WHILE xmlNode != NIL
SYSREFRESH()
IF .NOT. EMPTY( xmlNode:cData )
IF SUBS( xmlNode:cData,1,1 ) # "<"
oCampo := xmlNode:cName
oConteudo := xmlNode:cData
ENDIF
ELSE
oCampo := xmlNode:cName
ENDIF
? oCampo, oConteudo
xmlNode := xmlIter:Next() // joga pro proximo campo
ENDDO
RETURN NIL
Abs
Re: xmlIter doubt
Posted: Wed Jun 04, 2014 4:52 pm
by Wanderson
Olá karinha obrigado pela resposta mas não é isso. No seu exemplo vc percorre o xml todo. Eu uso a opção do find que já vai pra primeira ocorrência que quero pesquisar, só que pode acontecer de não ter essa ocorrência no xml aí o quando faço xmlNode := xmlIter:Find('xCpl') e não acha dá erro na próxima linha que tem o cdata com o retorno. Teria que ter uma forma de testar o xmlNode pra ver se achou ou não a ocorrência procurada.
Re: xmlIter doubt
Posted: Wed Jun 04, 2014 5:07 pm
by karinha