I've done XML in production using Universe. Building XML without the Universe XML functions is simple enough to create and maintain. However, parsing other people's XML to extract data can be tricky and I recommend using the Universe XDOM functions. To make things easier, I created an XDOM.GETVALUE() function that encapsulated a couple functions:
FUNCTION XDOM.GETVALUE(XDOM, XPATH)
* This function encapsulates the messy code to get a single value
* from an XDOM object; hopefully making the calling program easier
* to understand.
******
$INCLUDE UNIVERSE.INCLUDE XML.H
*
EQU VERBOSE LIT \ NULL ; **DISPLAY\
EQU NAMESPACE$EMPTY TO ""
*
VALUE = ""
ERRCODE = XDOMLocate(XDOM, XPATH, NAMESPACE$EMPTY, NODE)
IF (ERRCODE) THEN
VERBOSE "ERROR! XDOMLocate() FOR ":DQUOTE(XPATH):" FAILED! ERRCODE=":ERRCODE
RETURN (@NULL)
END
ERRCODE = XDOMGetNodeValue(NODE, VALUE)
IF (ERRCODE EQ XML.ERROR) THEN
* the node was found, but was empty
VERBOSE "ERROR! XDOMGetNodeValue() FOR ":DQUOTE(XPATH):" FAILED! ERRCODE=":ERRCODE
RETURN ("")
END
IF (ERRCODE) THEN
VERBOSE "ERROR! XDOMGetNodeValue() FOR ":DQUOTE(XPATH):" FAILED! ERRCODE=":ERRCODE
RETURN ("")
END
RETURN (VALUE)
END