1. A method comprising: receiving, by a computer system from a user, a first template document expressed in a first document format; reading, by the computer system, a first portion of the first template document, wherein the first portion corresponds to a paragraph block in the first template document; instantiating, by the computer system, a root data object based on the first portion, wherein the root data object includes a method for outputting source code in a second document format distinct from the first document format that corresponds to the first portion; reading, by the computer system, a second portion of the first template document, wherein the second portion corresponds to a placeholder tag, a transformation tag, a block of static content, or a formatting attribute in the first template document; instantiating, by the computer system, a child data object based on the second portion, wherein the child data object is instantiated as a child of the root data object in an object hierarchy, and wherein the child data object includes a method for outputting source code in the second document format that corresponds to the second portion; generating, by the computer system, a second template document expressed in the second document format by invoking the method included in the root data object and the method included in the child data object; and combining, by the computer system, the second template document with report data to generate a report, wherein the second document format is Extensible Stylesheet Language (XSL).