Style Sheet Directives Embedded in a Document
Occasionally, existing XML contains the style sheet directive of <?xml:stylesheet?>. Microsoft Internet Explorer accepts this as an alternative to the <?xml-stylesheet?> syntax. When the XML data contains an <?xml:stylesheet?> directive, as shown in the following data, attempting to load this data into the XML Document Object Model (DOM) throws an exception.
<?xml version="1.0" ?> <?xml:stylesheet type="text/xsl" href="test2.xsl"?> <root> <test>Node 1</test> <test>Node 2</test> </root>
This occurs because the <?xml:stylesheet?> is considered an invalid ProcessingInstruction to the DOM. Any ProcessingInstruction, according to the Namespaces in XML specification, can only be no-colon names (NCNames), as opposed to qualified names (QNames).
From Section 6 of the Namespaces in XML specification, the affect of having the Load and LoadXml methods conform to the specification is that in a document:
All element types and attribute names contain either zero or one colon.
No entity names, ProcessingInstruction targets, or notation names contain any colons.
With the <?xml:stylesheet?> containing a colon, you now violate the rule in the second bullet.
According to the World Wide Web Consortium (W3C) Associating Style Sheets with XML documents Version 1.0 Recommendation, located at www.w3.org/TR/xml-stylesheet, the processing instruction to associate an XSLT style sheet with an XML document is <?xml-stylesheet?>, with a dash replacing the colon.