code: void constructNode(
            String nodeName, String prefix, String nodeNamespace, TransformerImpl transformer)
              throws TransformerException
    {
  
      boolean shouldAddAttrs;
  
      try
      {
        SerializationHandler rhandler = transformer.getResultTreeHandler();
  
        if (null == nodeName)
        {
          shouldAddAttrs = false;
        }
        else
        {
          if (null != prefix)
          {
            rhandler.startPrefixMapping(prefix, nodeNamespace, true);
          }
  
          rhandler.startElement(nodeNamespace, QName.getLocalPart(nodeName),
                                nodeName);
  
          super.execute(transformer);
  
          shouldAddAttrs = true;
        }
  
        transformer.executeChildTemplates(this, shouldAddAttrs);
  
        // Now end the element if name was valid
        if (null != nodeName)
        {
          rhandler.endElement(nodeNamespace, QName.getLocalPart(nodeName),
                              nodeName);
          if (null != prefix)
          {
            rhandler.endPrefixMapping(prefix);
          }
        }
      }
      catch (SAXException se)
      {
        throw new TransformerException(se);
      }
    }
docs: Construct a node in the result tree.  This method is overloaded by
  xsl:attribute. At this class level, this method creates an element.
  If the node is null, we instantiate only the content of the node in accordance
  with section 7.1.2 of the XSLT 1.0 Recommendation.
  
  @param nodeName The name of the node, which may be <code>null</code>.  If <code>null</code>,
  only the non-attribute children of this node will be processed.
  @param prefix The prefix for the namespace, which may be <code>null</code>.
  If not <code>null</code>, this prefix will be mapped and unmapped.
  @param nodeNamespace The namespace of the node, which may be not be <code>null</code>.
  @param transformer non-null reference to the the current transform-time state.
  
  @throws TransformerException