The XSLT 1.1 working draft introduced a new element, <xsl:document> , to support multiple output documents, and its likely this element will be added to XSLT 2.0. It has the following attributes:
href (mandatory). Indicates where the new document should be placed. Set to an absolute or relative URI, without a fragment identifier.
method (optional). Sets the output method used to create the result document. Set to xml, html, text, or a QName that is not an NCName.
version (optional). Sets the version of the output document. Set to an NMTOKEN.
encoding (optional). Sets the encoding of the output document. Set to a string.
omit-xml-declaration (optional). Set to yes or no to omit the XML declaration or not.
cdata-section-elements (optional). Sets the names of those elements whose content you want output as CDATA sections. Set to a whitespace-separated list of QNames.
doctype-public (optional). Specifies the public identifier to be used in the <!DOCTYPE> declaration in the output. Set to a string value.
doctype-system (optional). Specifies the system identifier to be used in the <!DOCTYPE> declaration in the output. Set to a string value.
encoding (optional). Sets the character encoding. Set to a string value.
indent (optional). Specifies whether the output should be indented to show its nesting structure. Set to yes or no.
media-type (optional). Sets the MIME type of the output. Set to a string value.
standalone (optional). Specifies whether a standalone declaration should be included in the output and sets its value if so. Set to yes or no.
This element contains a template body.
In the following example, based on a simplified stylesheet, I create two frames in an HTML document, as well as the two HTML documents that are to be displayed in those frames , frame1.html and frame2.html. I create the first frame and the document that is to appear in it, frame1.html, this way, using <xsl:document> (note that here, Im setting the version attribute to 1.1 because were using a feature that is only a part of the XSLT 1.1 working draft, but 1.1 will probably not be a legal version value in the long run; if <xsl:document> is part of XSLT 2.0, you should set the version to 2.0):
<HTML xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl::version="1.1"> <HEAD> <TITLE> Two Frames </TITLE> </HEAD> <FRAMESET cols="50%, 50%"> <FRAME src="frame1.html"/> <xsl:document href="frame1.html"> <HTML> <HEAD> <TITLE> Frame 1 </TITLE> </HEAD> <BODY> <H1>This is frame 1.</H1> </BODY> </HTML> </xsl:document> . . .
Then I can create the second frame and the document that is to appear in that frame, frame2.html, as follows :
<HTML xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl::version="1.1"> <HEAD> <TITLE> Two Frames </TITLE> </HEAD> <FRAMESET cols="50%, 50%"> <FRAME src="frame1.html"/> <xsl:document href="frame1.html"> <HTML> <HEAD> <TITLE> Frame 1 </TITLE> </HEAD> <BODY> <H1>This is frame 1.</H1> </BODY> </HTML> </xsl:document> <FRAME src="frame2.html"/> <xsl:document href="frame2.html"> <HTML> <HEAD> <TITLE> Frame 2 </TITLE> </HEAD> <BODY> <H1>This is frame 2.</H1> </BODY> </HTML> </xsl:document> </FRAMESET> </HTML>
An XSLT 1.1-Only ExampleNote that this is an XSLT 1.1 working draft-only example. No publicly -available XSLT processors (that I know of) handle the <xsl:document> element yet. |