// Another Sample
#include "
hbmxml.ch"
STATIC s_mxml_error := .F.
STATIC s_mxml_error_msg := ""
// *---------------------------------------------------------------------------*
// F_XML_Read( cXML )
// Reading XML data
// *---------------------------------------------------------------------------*
FUNCTION F_XML_Read( cXML )
LOCAL oXml
LOCAL aNode := Array( 8 )
LOCAL aData := Array( 64 )
LOCAL bResult := .T.
mxmlSetErrorCallback( @my_mxmlError() )
oXml := mxmlLoadString( oXml, cXML, MXML_OPAQUE_CALLBACK )
IF !( s_mxml_error )
IF !( Empty( aNode[ 1 ] := mxmlFindElement( oXml, oXml, "Number", NIL, NIL, MXML_DESCEND ) ) )
aData[ 1 ] := PadL( mxmlGetOpaque( aNode[ 1 ] ), 6, '0' )
ENDIF
IF !( Empty( aNode[ 1 ] := mxmlFindElement( oXml, oXml, "ID", NIL, NIL, MXML_DESCEND ) ) )
aData[ 2 ] := mxmlGetOpaque( aNode[ 1 ] )
ENDIF
IF !( Empty( aNode[ 1 ] := mxmlFindElement( oXml, oXml, "Date", NIL, NIL, MXML_DESCEND ) ) )
aData[ 3 ] := mxmlGetOpaque( aNode[ 1 ] )
ENDIF
IF !( Empty( aNode[ 1 ] := mxmlFindElement( oXml, oXml, "Invoice", NIL, NIL, MXML_DESCEND ) ) )
aData[ 4 ] := mxmlGetOpaque( aNode[ 1 ] )
ENDIF
// *---------------------------------------------------------------------------*
// "Messages"
// *---------------------------------------------------------------------------*
IF !( Empty( aNode[ 1 ] := mxmlFindElement( oXml, oXml, "Messages", NIL, NIL, MXML_DESCEND ) ) )
IF !( Empty( aNode[ 2 ] := mxmlFindElement( aNode[ 1 ], aNode[ 1 ], "Code", NIL, NIL, MXML_DESCEND ) ) )
aData[ 11 ] := mxmlGetOpaque( aNode[ 2 ] )
ENDIF
IF !( Empty( aNode[ 2 ] := mxmlFindElement( aNode[ 1 ], aNode[ 1 ], "Data", NIL, NIL, MXML_DESCEND ) ) )
aData[ 12 ] := mxmlGetOpaque( aNode[ 2 ] )
ENDIF
// mxmlGetNextSibling can be use for a recursive loop
ENDIF
oXml := mxmlDelete( oXml )
ELSE
bResult := .F.
ENDIF
RETURN( bResult )