XML and XSL in one file

1. XSL and XML inside one file


XSL and XML inside one file

Jeni Tennison

This is covered in the XSLT Recommendation at http://www.w3.org/TR/xslt#section-Embedding-Stylesheets. You can embed a stylesheet within an XML document, but you still need to use the xml-stylesheet processing instruction to *use* it for that document.

Here is a skeletal XML document with an embedded stylesheet that you can expand: Note that the type (text/xml) could more practically be text/xsl to a Microsoft IE audience.

<?xml version="1.0"?>
<?xml-stylesheet type="text/xml" href="#stylesheet"?>
<!DOCTYPE doc [
<!ATTLIST xsl:stylesheet
<xsl:stylesheet id="stylesheet"
  <!-- any xsl:import elements -->
  <xsl:template match="xsl:stylesheet" />
  <!-- rest of your stylesheet -->

<!-- rest of your XML document -->


There are two things particularly of note.

Firstly, you have to have a DTD that defines the xsl:stylesheet element as having an 'id' attribute of type ID - otherwise the 'href' pseudo-attribute in the xml-stylesheet processing instruction won't be able to find the stylesheet.

Secondly, you should almost certainly have a template matching xsl:stylesheet that does nothing so that the stylesheet is ignored when it runs - otherwise it will try to run on itself.