}
  final List parseWithParams(Node node)    throws TransformerConfigurationException, XPathExpressionException  {    List ret = new LinkedList();    while (node != null)      {        String namespaceUri = node.getNamespaceURI();        if (Stylesheet.XSL_NS.equals(namespaceUri) &&            Node.ELEMENT_NODE == node.getNodeType() &&            "with-param".equals(node.getLocalName()))          {            NamedNodeMap attrs = node.getAttributes();            TemplateNode content = parse(node.getFirstChild());            QName name =              getQName(getRequiredAttribute(attrs, "name", node));            String select = getAttribute(attrs, "select");            if (select != null)              {                if (content != null)                  {                    String msg = "parameter '" + name +                      "' has both select and content";                    DOMSourceLocator l = new DOMSourceLocator(node);                    throw new TransformerConfigurationException(msg, l);                  }                Expr expr = (Expr) xpath.compile(select);                ret.add(new WithParam(name, expr));              }            else              {                ret.add(new WithParam(name, content));              }          }        node = node.getNextSibling();      }    return ret.isEmpty() ? null : ret;  }