<xsl:processing-instruction> |
Creates a processing instruction in the output document.
Category
Instruction
Required Attributes
name Defines the name of this processing instruction.
Optional Attributes
None.
Content
An XSLT template. The contents of the template become the data of the processing instruction.
Appears in
<xsl:processing-instruction> appears inside a template.
Defined in
XSLT section 7.3, Creating Processing Instructions.
Example
We'll demonstrate a stylesheet that adds a processing instruction to an XML document. The processing instruction will associate the stylesheet template.xsl with this XML document. Here is our stylesheet:
    <?xml version="1.0"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:output method="xml"/>

      <xsl:template match="/">
        <xsl:processing-instruction name="xml-stylesheet">href="docbook/html/docbook.xsl"
           type="text/xsl"</xsl:processing-instruction>
        <xsl:copy-of select="."/>
      </xsl:template>

    </xsl:stylesheet>
This stylesheet simply uses the <xsl:copy-of> element to copy the input document to the result tree, adding a processing instruction along the way. We'll use our stylesheet with this XML document:
    <?xml version="1.0"?>
    <list>
      <title>A few of my favorite albums</title>
      <listitem>A Love Supreme</listitem>
      <listitem>Beat Crazy</listitem>
      <listitem>Here Come the Warm Jets</listitem>
      <listitem>Kind of Blue</listitem>
      <listitem>London Calling</listitem>
      <listitem>Remain in Light</listitem>
      <listitem>The Joshua Tree</listitem>
      <listitem>The Indestructible Beat of Soweto</listitem>
    </list>
When we run this transformation, here are the results:
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet href="docbook/html/docbook.xsl" type="text/xsl"?>
    <list>
      <title>A few of my favorite albums</title>
      <listitem>A Love Supreme</listitem>
      <listitem>Beat Crazy</listitem>
      <listitem>Here Come the Warm Jets</listitem>
      <listitem>Kind of Blue</listitem>
      <listitem>London Calling</listitem>
      <listitem>Remain in Light</listitem>
      <listitem>The Joshua Tree</listitem>
      <listitem>The Indestructible Beat of Soweto</listitem>
    </list>
Note that the contents of a processing instruction are text. Even though the processing instruction we just generated looks like it contains two attributes, you can't create the processing instruction like this:
    <?xml version="1.0"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:output method="xml"/>

      <xsl:template match="/">
        <xsl:processing-instruction name="xml-stylesheet">

          <!-- This doesn't work!  You can't put <xsl:attribute>
               elements inside a <xsl:processing-instruction> element. -->

          <xsl:attribute name="href">
            <xsl:text>docbook/html/docbook.xsl</xsl:text>
          </xsl:attribute>
          <xsl:attribute name="type">
            <xsl:text>text/xsl</xsl:text>
          </xsl:attribute>
        </xsl:processing-instruction>
        <xsl:copy-of select="."/>
      </xsl:template>

    </xsl:stylesheet>
If you try this, you'll get an exception from the XSLT processor.