attrValues = constructor.eval(context, docs, contextSequence, contextItem);
attrValues = constructor.eval(docs, contextSequence, contextItem);
	public Sequence eval(		StaticContext context,		DocumentSet docs,		Sequence contextSequence,		Item contextItem)		throws XPathException {		context.pushContext();		MemTreeBuilder builder = context.getDocumentBuilder();		// process attributes		AttributesImpl attrs = new AttributesImpl();		if(attributes != null) {			AttributeConstructor constructor;			Sequence attrValues;			QName attrQName;			// first, search for xmlns attributes and declare in-scope namespaces			for(Iterator i = attributes.iterator(); i.hasNext(); ) {				constructor = (AttributeConstructor)i.next();				if(constructor.isNamespaceDeclaration()) {					int p = constructor.getQName().indexOf(':');					if(p < 0)						context.declareInScopeNamespace("", constructor.getLiteralValue());					else {						String prefix = constructor.getQName().substring(p + 1);						context.declareInScopeNamespace(prefix, constructor.getLiteralValue());					}				}			}			// process the remaining attributes			for(Iterator i = attributes.iterator(); i.hasNext(); ) {				constructor = (AttributeConstructor)i.next();				if(!constructor.isNamespaceDeclaration()) {					attrValues = constructor.eval(context, docs, contextSequence, contextItem);					attrQName = QName.parse(context, constructor.getQName());					attrs.addAttribute(attrQName.getNamespaceURI(), attrQName.getLocalName(),						attrQName.toString(), "CDATA", attrValues.getStringValue());				}			}		}		// create the element		QName qn = QName.parse(context, qname);		int nodeNr = builder.startElement(qn, attrs);		// process element contents		if(content != null) {			content.eval(context, docs, contextSequence, contextItem);		}		builder.endElement();		NodeImpl node = ((DocumentImpl)builder.getDocument()).getNode(nodeNr);		context.popContext();		return node;	}