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.
xmlIter doubt
Re: xmlIter doubt
João Santos - São Paulo - Brasil
Re: xmlIter doubt
Olá karinha,karinha wrote:Wanderson, veja se este exemplo ajuda:
http://fivewin.com.br/index.php?/topic/ ... -xml-nf-e/
abs,
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
Algo assim Wanderson?
Abs
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
João Santos - São Paulo - Brasil
Re: xmlIter doubt
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
Veja estes exemplos com FIND() se ajuda:
http://www.pctoledo.com.br/forum/viewto ... 43&t=12543
http://fivewin.com.br/index.php?/topic/ ... ona-na-2g/
http://fivewin.com.br/index.php?/topic/ ... resolvido/
http://fivewin.com.br/index.php?/topic/ ... a-federal/
http://fivetechsupport.com/forums/viewt ... =6&t=25742
abs
http://www.pctoledo.com.br/forum/viewto ... 43&t=12543
http://fivewin.com.br/index.php?/topic/ ... ona-na-2g/
http://fivewin.com.br/index.php?/topic/ ... resolvido/
http://fivewin.com.br/index.php?/topic/ ... a-federal/
http://fivetechsupport.com/forums/viewt ... =6&t=25742
abs
João Santos - São Paulo - Brasil