XML and XSL in one file

1. XSL and XML inside one file

1.

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
  id	ID	#REQUIRED>
]>
<doc>
<xsl:stylesheet id="stylesheet"
                version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <!-- any xsl:import elements -->
  <xsl:template match="xsl:stylesheet" />
  <!-- rest of your stylesheet -->
</xsl:stylesheet>

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

</doc>

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.