XML C pull-parser based decode functions handle the decoding of simple XSD types. Calls to these functions are assembled in the C source code generated by the XBinder compiler to decode complex XML schema-based messages. In general, these complement the encoding model in which individual functions exist for each type. This differs from the SAX-based functions described below which use a different model.
As an example, the code documented above to encode a simple boolean value can be reversed to decode the value:
OSCTXT ctxt; int stat; const char* filename = "message.xml"; OSBOOL value; /* Init context structure */ stat = rtXmlInitContext (&ctxt); if (0 != stat) { printf ("Context initialization failed.\n"); rtxErrPrint (&ctxt); return stat; } /* Create input source object */ stat = rtxStreamFileCreateReader (&ctxt, filename); if (0 != stat) { printf ("Unable to open file input stream.\n"); rtxErrPrint (&ctxt); return stat; } /* Match expected start tag */ stat = rtXmlpMatchStartTag (&ctxt, OSUTF8("boolValue"), -1); if (0 != stat) { printf ("parse initial tag failed\n"); rtxErrPrint (&ctxt); return stat; } /* Decode boolean value */ stat = rtXmlpDecBool (&ctxt, &value); if (0 != stat) { printf ("decode boolean failed\n"); rtxErrPrint (&ctxt); return stat; } /* Match expected end tag */ stat = rtXmlpMatchEndTag (&ctxt, 0); if (0 != stat) { printf ("parse initial tag failed\n"); rtxErrPrint (&ctxt); return stat; } rtxStreamClose (&ctxt); rtxFreeContext (&ctxt);