/* Generated By:JJTree: Do not edit this line. OfType.java */

package org.apache.xpath.parser;

import java.util.Vector;
import javax.xml.transform.TransformerException;
import org.apache.xpath.Expression;
import org.apache.xpath.ExpressionOwner;
import org.apache.xpath.XPathContext;
import org.apache.xpath.XPathVisitor;
import org.apache.xpath.objects.XObject;

public class OfType extends NonExecutableExpression
{

  /**
   * Constructor for OfType.
   * @param parser
   * @param value
   */
  public OfType(XPath parser, String value)
  {
    super(parser, value);
  }

  /**
   * Constructor for OfType.
   * @param parser
   */
  public OfType(XPath parser)
  {
    super(parser);
  }

}
