In my experience, DBMS_XMLGEN is good for quickly and dirtyly converting data to xml, but I never liked it because you need to pass SQL as a string. In addition, your control over element names and the ROWSET / ROW structure is severely limited.
The XML functions are extremely convenient, and my favorite, if you are dealing with relatively simple structures. For example, when you fall into several levels of XMLAgg, I find that it quickly goes into confusion.
XMLDOM - XML, . , Java DOM, DOMNode, PL/SQL , DOMElement DOMNode .. , .