package lux.functions; import net.sf.saxon.om.Item; import net.sf.saxon.om.Sequence; import net.sf.saxon.om.SequenceIterator; import net.sf.saxon.om.StructuredQName; import net.sf.saxon.trans.XPathException; public abstract class InterpreterCall extends NamespaceAwareFunctionCall { protected void bindParameters (Sequence params) throws XPathException { Item param; SequenceIterator<?> paramIter = params.iterate(); while ((param = paramIter.next()) != null) { Item value = paramIter.next(); if (value == null) { throw new XPathException ("Odd number of items in third argument to lux:transform, which should be parameter/value pairs"); } String paramName = param.getStringValue(); String[] parts = paramName.split(":", 2); StructuredQName sQName; if (parts.length < 2) { sQName = new StructuredQName("", "", paramName); } else { String prefix = parts[0]; String name = parts[1]; String nsURI = getNamespaceResolver().getURIForPrefix(prefix, false); sQName = new StructuredQName(prefix, nsURI, name); } setParameter(sQName, value); } } protected abstract void setParameter (StructuredQName name, Item value); }