I think that the difference between the two scenarios is that
when data comes through via the HTTPService, the SimpleXMLDecoder
class is called and used to turn the result into something usable
(based on the resultFormat and makeObjectsBindable properties).
When you load the XML via a socket, the decoder is not called
by anyone, so you end up with the raw data on your hands. What you
could do is run the output of the socket request through an
instance of SimpleXMLDecoder and see if that produces the results
you are expecting.