elemexsltfuncresult.java

来自「java jdk 1.4的源码」· Java 代码 · 共 94 行

JAVA
94
字号
package org.apache.xalan.templates;//import org.w3c.dom.*;import org.apache.xml.dtm.DTM;import org.xml.sax.*;import org.apache.xpath.*;import org.apache.xpath.Expression;import org.apache.xpath.objects.XObjectFactory;import org.apache.xpath.objects.XObject;import org.apache.xpath.objects.XString;import org.apache.xpath.objects.XRTreeFrag;import org.apache.xpath.objects.XRTreeFragSelectWrapper;import org.apache.xml.utils.QName;import org.apache.xalan.trace.SelectionEvent;import org.apache.xalan.res.XSLTErrorResources;import org.apache.xalan.transformer.TransformerImpl;import javax.xml.transform.TransformerException;/** * Handles the EXSLT result element within an EXSLT function element. */public class ElemExsltFuncResult extends ElemVariable{   /**   * Generate the EXSLT function return value, and assign it to the variable   * index slot assigned for it in ElemExsltFunction compose().   *    */  public void execute(TransformerImpl transformer) throws TransformerException  {        XPathContext context = transformer.getXPathContext();    VariableStack varStack = context.getVarStack();    // ElemExsltFunc result should always be within an ElemExsltFunction.    ElemExsltFunction owner = getOwnerFunction();    if (owner != null)    {      int resultIndex = owner.getResultIndex();      // Verify that result has not already been set by another result      // element. Recursion is allowed: intermediate results are cleared       // in the owner ElemExsltFunction execute().      if (varStack.isLocalSet(resultIndex))        throw new TransformerException          ("An EXSLT function cannot set more than one result!");      int sourceNode = context.getCurrentNode();      // Set the return value;      XObject var = getValue(transformer, sourceNode);         varStack.setLocalVariable(resultIndex, var);    }      }  /**   * Get an integer representation of the element type.   *   * @return An integer representation of the element, defined in the   *     Constants class.   * @see org.apache.xalan.templates.Constants   */  public int getXSLToken()  {    return Constants.EXSLT_ELEMNAME_FUNCRESULT;  }    /**   * Return the node name, defined in the   *     Constants class.   * @see org.apache.xalan.templates.Constants.   * @return The node name   *    */   public String getNodeName()  {    return Constants.EXSLT_ELEMNAME_FUNCRESULT_STRING;  }    /**   * Get the ElemExsltFunction that contains the ElemResult so we can set an ElemExsltFunction variable   * to the local variable stack index to the return value.   */  public ElemExsltFunction getOwnerFunction()  {  	ElemTemplateElement elem = this;  	while((elem != null) && !(elem instanceof ElemExsltFunction))  	{    	elem = elem.getParentElem();  	}  	return (ElemExsltFunction)elem;  }  }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?