variablesafeabsref.java

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

JAVA
57
字号
package org.apache.xpath.operations;import javax.xml.transform.TransformerException;import org.apache.xml.dtm.DTM;import org.apache.xml.dtm.DTMIterator;import org.apache.xml.dtm.DTMManager;import org.apache.xpath.Expression;import org.apache.xpath.XPathContext;import org.apache.xpath.objects.XNodeSet;import org.apache.xpath.objects.XObject;/** * This is a "smart" variable reference that is used in situations where  * an absolute path is optimized into a variable reference, but may  * be used in some situations where the document context may have changed. * For instance, in select="document(doc/@href)//name[//salary > 7250]", the  * root in the predicate will be different for each node in the set.  While  * this is easy to detect statically in this case, in other cases static  * detection would be very hard or impossible.  So, this class does a dynamic check  * to make sure the document context of the referenced variable is the same as  * the current document context, and, if it is not, execute the referenced variable's  * expression with the current context instead. */public class VariableSafeAbsRef extends Variable{	  /**   * Dereference the variable, and return the reference value.  Note that lazy    * evaluation will occur.  If a variable within scope is not found, a warning    * will be sent to the error listener, and an empty nodeset will be returned.   *   *   * @param xctxt The runtime execution context.   *   * @return The evaluated variable, or an empty nodeset if not found.   *   * @throws javax.xml.transform.TransformerException   */  public XObject execute(XPathContext xctxt, boolean destructiveOK)   	throws javax.xml.transform.TransformerException  {  	XNodeSet xns = (XNodeSet)super.execute(xctxt, destructiveOK);  	DTMManager dtmMgr = xctxt.getDTMManager();  	int context = xctxt.getContextNode();  	if(dtmMgr.getDTM(xns.getRoot()).getDocument() !=   	   dtmMgr.getDTM(context).getDocument())  	{  		Expression expr = (Expression)xns.getContainedIter();  		xns = (XNodeSet)expr.asIterator(xctxt, context);  	}  	return xns;  }}

⌨️ 快捷键说明

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