XML transformations are most naturally defined as recursive functions on trees. Their direct implementation, however, causes inefficient memory usage because the input XML tree is completely built in memory before being processed. In contrast, programs in stream processing style minimise memory usage since it may output part of the result while reading the input. Stream processing programs, however, are harder to write because the programmer is left with the burden to maintain the state. In this paper, we propose a model for XML stream processing and show that all programs written in a particular style of recursive functions on XML trees, the macro forest transducer, can be automatically translated to our stream processors. The stream processor is declarative in style, but can be implemented efficiently by a pushdown machine. We thus get the best of both worlds — program clarity, and efficiency in execution.