id() Function |
Returns the node in the source tree whose ID attribute matches the value passed in as input.
Inputs
An object. If the input object is a node-set, the result is a node-set that contains the result of applying the id() function to the string value of each node in the argument node-set. Usually, the argument is some other node type, which is (or is converted to) a string. That string is then used as the search value while all attributes of type ID are searched. Remember that a limitation of the XML ID datatype is that a single set of names across all attributes is declared to be of type ID. The XSLT key() function and the associated <xsl:key> element address this and other limitations; see the key() function and <xsl:key> for more information.
Output
A node-set containing all nodes whose attributes of type ID match the string values of the input node-set. In practice, this node-set is a single node, the node whose attribute of type ID matches a string value.
Defined in
XPath section 4.1, Node Set Functions.
Example
For our example, we'll take this shortened version of the glossary we discussed earlier:
    <?xml version="1.0" ?>
    <!DOCTYPE glossary SYSTEM "glossary.dtd">
    <glossary>
      <glentry>
        <term id="applet">applet</term>
        <defn>
          An application program,
          written in the Java programming language, that can be
          retrieved from a web server and executed by a web browser.
          A reference to an applet appears in the markup for a web
          page, in the same way that a reference to a graphics
          file appears; a browser retrieves an applet in the same
          way that it retrieves a graphics file.
          For security reasons, an applet's access rights are limited
          in two ways: the applet cannot access the filesystem of the
          client upon which it is executing, and the applet's
          communication across the network is limited to the server
          from which it was downloaded.
          Contrast with <xref refid="servlet"/>.
        </defn>
      </glentry>

      <glentry>
        <term id="servlet">servlet</term>
        <defn>
          An application program, written in the Java programming language,
          that is executed on a web server. A reference to a servlet
          appears in the markup for a web page, in the same way that a
          reference to a graphics file appears. The web server executes
          the servlet and sends the results of the execution (if there are
          any) to the web browser. Contrast with <xref refid="applet" />.
        </defn>
      </glentry>
    </glossary>
Here's the stylesheet we'll use to resolve the references:
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" indent="yes"/>
    <xsl:strip-space elements="*"/>

      <xsl:template match="/">
        <xsl:apply-templates select="glossary"/>
      </xsl:template>

      <xsl:template match="glossary">
        <html>
          <head>
            <title>
              <xsl:text>Glossary Listing </xsl:text>
            </title>
          </head>
          <body>
            <h1>
              <xsl:text>Glossary Listing </xsl:text>
            </h1>
            <xsl:apply-templates select="glentry"/>
          </body>
        </html>
      </xsl:template>

      <xsl:template match="glentry">
        <p>
          <b>
            <a>
              <xsl:attribute name="name">
                <xsl:value-of select="term/@id" />
              </xsl:attribute>
            </a>

            <xsl:value-of select="term"/>
            <xsl:text>: </xsl:text>
          </b>
          <xsl:apply-templates select="defn"/>
        </p>
      </xsl:template>

      <xsl:template match="defn">
        <xsl:apply-templates
         select="*|comment()|processing-instruction()|text()"/>
      </xsl:template>

      <xsl:template match="xref">
        <a>
          <xsl:attribute name="href">
            <xsl:text>#</xsl:text><xsl:value-of select="@refid"/>
          </xsl:attribute>
          <xsl:choose>
            <xsl:when test="id(@refid)/@xreftext">
              <xsl:value-of select="id(@refid)/@xreftext"/>
            </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="id(@refid)"/>
            </xsl:otherwise>
          </xsl:choose>
        </a>
      </xsl:template>

    </xsl:stylesheet>
Our stylesheet generates these results:
    <html>
    <head>
    <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Glossary Listing </title>
    </head>
    <body>
    <h1>Glossary Listing </h1>
    <p>
    <b><a name="applet"></a>applet: </b>
          An application program,
          written in the Java programming language, that can be
          retrieved from a web server and executed by a web browser.
          A reference to an applet appears in the markup for a web
          page, in the same way that a reference to a graphics
          file appears; a browser retrieves an applet in the same
          way that it retrieves a graphics file.

          For security reasons, an applet's access rights are limited
          in two ways: the applet cannot access the filesystem of the
          client upon which it is executing, and the applet's
          communication across the network is limited to the server
          from which it was downloaded.
          Contrast with <a href="#servlet">servlet</a>.
        </p>
    <p>
    <b><a name="servlet"></a>servlet: </b>
          An application program, written in the Java programming language,
          that is executed on a web server. A reference to a servlet
          appears in the markup for a web page, in the same way that a
          reference to a graphics file appears. The web server executes
          the servlet and sends the results of the execution (if there are
          any) to the web browser. Contrast with <a href="#applet">applet</a>.
        </p>
    </body>
    </html>
When rendered in a browser, our hyperlinked document looks like Figure C-4. Generated HTML glossary