The NotesDOMParser doesn't convert anything -- it just creates a parse tree from XML text. A text representation of XML is cool, human-readable and easy to transfer across wires from one machine to another, but it's nearly useless for extracting data or manipulating the document. It's just one big string. You would have to write code to search through the string to find what you want, slice it up into substrings, copy portions of it as needed, insert new substrings, etc. That's a royal pain in the backside.
A DOM parser takes the text and converts it into a hierarchical data structure. Once the document has been parsed into a tree (so called because it starts with a "trunk" -- the root document -- and branches off into child elements that may branch off into further children and so on) you have access to a number of methods for searching and changing the tree. The NotesDOMParser is most often used with DXL, but there's nothing special about the NotesDOMParser, and no special relationship between it and DXL. It just happens to be the built-in DOM parser (you can use others in your code, and before Notes and Domino 6, you had to use someone else's parser -- usually the MS version).
As for why your file was empty, well, there was no output from the NotesDOMParser. You would have had to call the parser's Serialize or Output method (they do the same thing; Serialize is an alias for Output) from code called from the PostDOMParse event of the parser:
(in your main code, after you declare the parser but before you use it)
On Event PostDOMParse From domParser Call SomeSubroutine
where SomeSubroutine is declared like this:
Sub SomeSubroutine (Source As NotesDOMParser)
'do stuff here
Strictly speaking, you can just launch into playing with the DOM inline with your main code, but that's going to get seriously long and sloppy. When your code resumes to the main routine, call domParser.Serialize or domParser.Output to transform the tree back into text, and that will be streamed to your file.