FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour xmlIter doubt
Posts: 332
Joined: Thu Nov 17, 2005 09:11 PM
xmlIter doubt
Posted: Tue Jun 03, 2014 05:27 PM

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.

Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: xmlIter doubt
Posted: Tue Jun 03, 2014 05:47 PM

Wanderson, veja se este exemplo ajuda:

http://fivewin.com.br/index.php?/topic/ ... -xml-nf-e/

abs,

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 332
Joined: Thu Nov 17, 2005 09:11 PM
Re: xmlIter doubt
Posted: Tue Jun 03, 2014 06:42 PM
karinha wrote:Wanderson, veja se este exemplo ajuda:

http://fivewin.com.br/index.php?/topic/ ... -xml-nf-e/

abs,


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.
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: xmlIter doubt
Posted: Tue Jun 03, 2014 07:51 PM
Algo assim Wanderson?

Code (fw): Select all Collapse
#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
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 332
Joined: Thu Nov 17, 2005 09:11 PM
Re: xmlIter doubt
Posted: Wed Jun 04, 2014 04:52 PM

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.

Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM

Continue the discussion