FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour XML Read Problems
Posts: 708
Joined: Fri Oct 28, 2005 09:53 AM
XML Read Problems
Posted: Tue Apr 26, 2016 01:19 AM

Hello Everyone,

I am having inconsistent problems reading a XML file via Harbour. I wanted to get your assistance reading XML node. I have attached my source, your feedback is much appreciated.

include "FiveWin.ch"

static atzones := { ;
{ "ET", -5, -4 }, ; // Eastern
{ "CT", -6, -5 }, ; // Central
{ "MT", -7, -6 }, ; // Mountain
{ "PT", -8, -7 }, ; // Pacific
{ "AT", -9, -8 }, ; // Alaska
{ "HT", -10, -10 }, ; // Hawaii
{ "AR", -7, -7 }, ; // Arizona
{ "SGT", 8, 8 }, ; // Singapore
{ "HKT", 8, 8 } } // Hongkong

static aDsTable := { ;
{ 2015, {^ 2015/03/08 02:00:00 }, {^ 2015/11/01 02:00:00 } }, ;
{ 2016, {^ 2016/03/13 02:00:00 }, {^ 2016/11/06 02:00:00 } }, ;
{ 2017, {^ 2017/03/12 02:00:00 }, {^ 2017/11/05 02:00:00 } }, ;
{ 2018, {^ 2018/03/11 02:00:00 }, {^ 2018/11/04 02:00:00 } }, ;
{ 2019, {^ 2019/03/10 02:00:00 }, {^ 2019/11/03 02:00:00 } } }

REQUEST DBFCDX
REQUEST DBFFPT

//-----------------------------------------------------------------------------
function Main( cQuery )

local hFile , ;
oXmlDoc , ;
oXmlIter , ;
oTagActual , ;
nItems := 0 , ;
cTagName := "" , ;
cTagData := "" , ;
cMtsn := "" , ;
cAssetid := "" , ;
cMsgtype := "" , ;
cEventsource := "" , ;
cExtpwr := "" , ;
cSerialtype := "" , ;
cSeralid := "" , ;
cSerialname := "" , ;
cSerialdata := "" , ;
cTrid := "" , ;
cLatitude := "" , ;
cLongitude := "" , ;
cBattery := "" , ;
cTimeSave := "" , ;
cTime := "" , ;
dDate := CTOD( " / / " ) , ;
cQuality := "" , ;
cGeoname := "" , ;
cState := "" , ;
cCountry := "" , ;
cDistance := "" , ;
oSql , ;
oSql2 , ;
cSqlIns , ;
cSqlUpdate , ;
dStartDate := CTOD("03/14/2016") , ;
cLocation1 := "" , ;
cLocation2 := "" , ;
lAtdepot := .F. , ;
cCurrHub := '' , ;
cDepotname := '' , ;
nCtnrRec := 0 , ;
lPass := .F.

IF PCOUNT()<1
cQuery := ""
ENDIF

// Global Vars...
PUBLIC Ptitle := "GPS" , ;
Pbuild := "20160320-2158" , ;
cEol := CHR(13) + CHR(10) , ;
cSource := "c:\xml\inbox\" , ;
cHistory := "c:\xml\inbox\history\" , ;
xPROVIDER := "SQLOLEDB" , ;
xSOURCE := "9.9.9.9" , ;
xDATABASE := "DB-NAME" , ;
xUSERID := "USERID" , ;
xPASSWORD := "PASSWORD" , ;
cOperations := "<operations@cdmsoft.com>" , ;
cPath := 'c:\data\' , ;
lAds := .F. , ;
cRevised := "March 20, 2016 - 1745"

RddSetDefault( 'DBFCDX' )

// XML Query...
IF EMPTY( cQuery )
IF ! _XmlQuery()
QUIT
ENDIF
ENDIF

// Open...
_db( cPath, 'edi315' )
_db( cPath, 'depot' )
_db( cPath, 'ctnr' )
_db( cPath, 'ctnrtrx' )
_db( cPath, 'perdiem' )
_db( cPath, 'user' )

aXmlFile := Directory( cSource + "*.XML" )
IF LEN(aXmlFile)>0
cXmlFile := aXmlFile[1,1]
hFile := FOpen( cSource + cXmlFile )
oXmlDoc := TXmlDocument():New( hFile )
oXmlIter := TXmlIterator():New( oXmlDoc:oRoot )

 WHILE .T.
     oTagActual = oXmlIter:Next()
     If oTagActual != nil
        //MsgInfo( oTagActual:cName, oTagActual:cData )

        // Init...
        cTagName := &quot;&quot;
        cTagData := &quot;&quot;

        IF (oTagActual:cName != nil)
           cTagName := oTagActual:cName
        ENDIF
        IF (oTagActual:cData != nil)
           cTagData := oTagActual:cData
        ENDIF

        IF UPPER(cTagName)==&quot;MTSN&quot;
           cMtsn        := _SqlClean( UPPER( cTagData ) )
        ENDIF
        IF UPPER(cTagName)==&quot;ASSETID&quot;
           cAssetid     := _SqlClean( UPPER( cTagData ) )
        ENDIF
        IF UPPER(cTagName)==&quot;MESSAGETYPE&quot;
           cMsgtype     := _SqlClean( UPPER( cTagData ) )
        ENDIF
        IF UPPER(cTagName)==&quot;EVENTSOURCE&quot;
           cEventsource := _SqlClean( UPPER( cTagData ) )
        ENDIF
        IF UPPER(cTagName)==&quot;EXTPWR&quot;
           cExtpwr      := _SqlClean( UPPER( cTagData ) )
        ENDIF
        IF UPPER(cTagName)==&quot;SERIALTYPE&quot;
           cSerialtype  := _SqlClean( UPPER( cTagData ) )
        ENDIF
        IF UPPER(cTagName)==&quot;SERIALID&quot;
           cSerialid    := _SqlClean( UPPER( cTagData ) )
        ENDIF
        IF UPPER(cTagName)==&quot;SERIALNAME&quot;
           cSerialname  := _SqlClean( UPPER( cTagData ) )
        ENDIF
        IF UPPER(cTagName)==&quot;SERIALDATA&quot;
           cSerialdata  := _SqlClean( UPPER( cTagData ) )
        ENDIF
        IF UPPER(cTagName)==&quot;TRID&quot;
           cTrid        := _SqlClean( UPPER( cTagData ) )
        ENDIF
        IF UPPER(cTagName)==&quot;LATITUDE&quot;
           cLatitude    := _SqlClean( UPPER( cTagData ) )
        ENDIF
        IF UPPER(cTagName)==&quot;LONGITUDE&quot;
           cLongitude   := _SqlClean( UPPER( cTagData ) )
        ENDIF
        IF UPPER(cTagName)==&quot;BATTERY&quot;
           cBattery     := _SqlClean( UPPER( cTagData ) )
        ENDIF
        IF UPPER(cTagName)==&quot;TIME&quot;
           cTime        := _SqlClean( UPPER( cTagData ) )
           cTimeSave    := cTime
           dDate        := CTOD( SUBSTR( cTime,  6, 5 ) + &quot;/&quot; + LEFT(cTime, 4 ) )
           cTime        := SUBSTR( cTime, 12 )
        ENDIF
        IF UPPER(cTagName)==&quot;QUALITY&quot;
           cQuality     := _SqlClean( UPPER( cTagData ) )
        ENDIF
        IF UPPER(cTagName)==&quot;GEONAME&quot;
           cGeoname     := _SqlClean( UPPER( cTagData ) )
        ENDIF
        IF UPPER(cTagName)==&quot;STATE&quot;
           cState       := _SqlClean( UPPER( cTagData ) )
        ENDIF
        IF UPPER(cTagName)==&quot;COUNTRY&quot;
           cCountry     := _SqlClean( UPPER( cTagData ) )
        ENDIF
        IF UPPER(cTagName)==&quot;DISTANCE&quot;
           cDistance    := _SqlClean( UPPER( cTagData ) )
        ENDIF
        IF UPPER(cTagName)==&quot;GLS&quot;
           IF (! EMPTY( cAssetid )) .AND. (dDate&gt;=dStartdate) .AND. (! LEFT(cAssetid,4)==&quot;TESU&quot;)

              // Init...
              lAtDepot   := .F.
              cCurrHub   := ''
              cDepotname := ''
              nCtnrRec   := 0
              cReqno     := ''
              cTimezone  := ''


                 IF (nCtnrRec&gt;0)
                    SELECT ctnrtrx
                    GO nCtnrRec

                    IF (ALLTRIM(cAssetid)==ALLTRIM(ctnrtrx-&gt;ctnrno)) .AND. (EMPTY(ctnrtrx-&gt;termdate)) .AND. (! EMPTY(ctnrtrx-&gt;resvdate)) .AND. (!EMPTY(ctnrtrx-&gt;ingate)) .AND. (!EMPTY(ctnrtrx-&gt;notify)) .AND. (!EMPTY(ctnrtrx-&gt;outgate))


                       DO WHILE (.T.)
                          IF ctnrtrx-&gt;( dbrlock() )
                             ctnrtrx-&gt;( dbrunlock() )
                             EXIT
                          ENDIF
                       ENDDO
              ENDIF

              SELECT edi315
              APPEND BLANK
              edi315-&gt;isa              := 'HEREGPS'
              edi315-&gt;ctnr             := ALLTRIM( cAssetid )
              edi315-&gt;reqno            := ALLTRIM( cReqno )
              edi315-&gt;b4               := IF(lAtDepot,'T','X')
              edi315-&gt;b4d              := dDate
              edi315-&gt;b4t              := ALLTRIM( cTime )
              edi315-&gt;r4e              := ALLTRIM( cGeoname )
              edi315-&gt;r4d              := dDate
              edi315-&gt;r4t              := ALLTRIM( cTime )
              edi315-&gt;mstn             := ALLTRIM( cMtsn )
              edi315-&gt;msgtype          := ALLTRIM( cMsgtype )
              edi315-&gt;eventsrc         := ALLTRIM( cEventsource )
              edi315-&gt;extpwr           := ALLTRIM( cExtpwr )
              edi315-&gt;serialtype       := ALLTRIM( cSerialtype )
              edi315-&gt;serialid         := ALLTRIM( cSerialid )
              edi315-&gt;serialname       := ALLTRIM( cSerialname )
              edi315-&gt;serialdata       := ALLTRIM( cSerialdata )
              edi315-&gt;trid             := ALLTRIM( cTrid )
              edi315-&gt;latitude         := ALLTRIM( cLatitude )
              edi315-&gt;longitude        := ALLTRIM( cLongitude )
              edi315-&gt;battery          := ALLTRIM( cBattery )
              edi315-&gt;quality          := ALLTRIM( cQuality )
              edi315-&gt;landmark         := ALLTRIM( cGeoname )
              edi315-&gt;landmarkst       := ALLTRIM( cState )
              edi315-&gt;landmarkis       := ALLTRIM( cCountry )
              edi315-&gt;landmarkdi       := ALLTRIM( cDistance )
              edi315-&gt;txdate           := DATE()
              edi315-&gt;txtime           := TIME()
              edi315-&gt;timesave         := cTimeSave
              nItems++

              // Init...
              cMtsn        := &quot;&quot;
              cAssetid     := &quot;&quot;
              cMsgtype     := &quot;&quot;
              cEventsource := &quot;&quot;
              cExtpwr      := &quot;&quot;
              cSerialtype  := &quot;&quot;
              cSeralid     := &quot;&quot;
              cSerialname  := &quot;&quot;
              cSerialdata  := &quot;&quot;
              cTrid        := &quot;&quot;
              cLatitude    := &quot;&quot;
              cLongitude   := &quot;&quot;
              cBattery     := &quot;&quot;
              cTime        := &quot;&quot;
              cTimeSave    := &quot;&quot;
              dDate        := CTOD( &quot;  /  /  &quot; )
              cQuality     := &quot;&quot;
              cGeoname     := &quot;&quot;
              cState       := &quot;&quot;
              cCountry     := &quot;&quot;
              cDistance    := &quot;&quot;

           ENDIF
        ENDIF
        HEval( oTagActual:aAttributes, { | cKey, cValue | MsgInfo( cKey, cValue ) } )
     Else
        Exit
     Endif
  End
  FClose( hFile )

  // Copy to History...
  COPY FILE (cSource + cXmlFile) TO (cHistory + cXmlFile)
  IF FILE( cHistory + cXmlFile )
     FERASE( cSource + cXmlFile )
  ENDIF

ENDIF
DbCloseAll()

MsgWait( 'Records Added = ' + LTRIM(STR(nItems,9)), Ptitle, 5 )

return nil

*~*~*~*~*~*~*~*~*~*
Darrell Ortiz
CDM Software Solutions, Inc.
https://www.cdmsoft.com
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
Re: XML Read Problems
Posted: Wed Apr 27, 2016 09:13 AM

Hi

Please view this post about convert XML to Hash, for more easy ;

http://xthefull.blogspot.com.es/2015/11 ... rbour.html

http://xthefull.blogspot.com.es/2016/03 ... e-iii.html

Or example direct from Harbour 3.4

https://github.com/vszakats/harbour-cor ... tohash.prg

Regards

Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)

Continue the discussion