gpt4 book ai didi

net.sf.saxon.sxpath.XPathVariable类的使用及代码示例

转载 作者:知者 更新时间:2024-03-23 19:13:05 25 4
gpt4 key购买 nike

本文整理了Java中net.sf.saxon.sxpath.XPathVariable类的一些代码示例,展示了XPathVariable类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。XPathVariable类的具体详情如下:
包路径:net.sf.saxon.sxpath.XPathVariable
类名称:XPathVariable

XPathVariable介绍

[英]An object representing an XPath variable for use in the standalone XPath API. The object can only be created by calling the declareVariable method of class IndependentContext. Note that once declared, this object is thread-safe: it does not hold the actual variable value, which means it can be used with any number of evaluations of a given XPath expression, in series or in parallel.

A variable can be given a value by calling XPathDynamicContext#setVariable(XPathVariable,net.sf.saxon.om.ValueRepresentation). Note that the value of the variable is not held in the XPathVariable object, but in the XPathDynamicContext, which means that the XPathVariable itself can be used in multiple threads.
[中]表示独立XPath API中使用的XPath变量的对象。只能通过调用类独立上下文的declareVariable方法来创建对象。请注意,一旦声明,这个对象就是线程安全的:它不包含实际的变量值,这意味着它可以与给定XPath表达式的任意数量的求值一起使用,可以是串行的,也可以是并行的。
可以通过调用XPathDynamicContext#setVariable(XPathVariable,net.sf.saxon.om.ValueRepresentation)为变量指定一个值。请注意,变量的值不是保存在XPathVariable对象中,而是保存在XPathDynamicContext中,这意味着XPathVariable本身可以在多个线程中使用。

代码示例

代码示例来源:origin: pmd/pmd

/**
 * Attempt to create a dynamic context on which to evaluate the {@link #xpathExpression}.
 *
 * @param elementNode the node on which to create the context; generally this node is the root node of the Saxon
 *                    Tree
 * @return the dynamic context on which to run the query
 * @throws XPathException if the supplied value does not conform to the required type of the
 * variable, when setting up the dynamic context; or if the supplied value contains a node that does not belong to
 * this Configuration (or another Configuration that shares the same namePool)
 */
private XPathDynamicContext createDynamicContext(final ElementNode elementNode) throws XPathException {
  final XPathDynamicContext dynamicContext = xpathExpression.createDynamicContext(elementNode);
  // Set variable values on the dynamic context
  for (final XPathVariable xpathVariable : xpathVariables) {
    final String variableName = xpathVariable.getVariableQName().getLocalName();
    for (final Map.Entry<PropertyDescriptor<?>, Object> entry : super.properties.entrySet()) {
      if (variableName.equals(entry.getKey().name())) {
        final ValueRepresentation valueRepresentation = getRepresentation(entry.getKey(), entry.getValue());
        dynamicContext.setVariable(xpathVariable, valueRepresentation);
      }
    }
  }
  return dynamicContext;
}

代码示例来源:origin: net.sf.saxon/Saxon-HE

/**
 * Factory method, for use by the declareVariable method of class IndependentContext
 *
 * @param name the name of the variable to create
 * @return the constructed XPathVariable
 */
protected static XPathVariable make(StructuredQName name) {
  XPathVariable v = new XPathVariable();
  v.name = name;
  return v;
}

代码示例来源:origin: net.sf.saxon/Saxon-HE

SequenceType requiredType = variable.getRequiredType();
if (requiredType != SequenceType.ANY_SEQUENCE) {
  XPathException err = TypeChecker.testConformance(value, requiredType, contextObject);
int slot = variable.getLocalSlotNumber();
StructuredQName expectedName = slot >= stackFrameMap.getNumberOfVariables() ? null :
    stackFrameMap.getVariableMap().get(slot);
if (!variable.getVariableQName().equals(expectedName)) {
  throw new XPathException(
      "Supplied XPathVariable is bound to the wrong slot: perhaps it was created using a different static context");

代码示例来源:origin: org.opengis.cite.saxon/saxon9

/**
 * Declare a variable. A variable must be declared before an expression referring
 * to it is compiled. The initial value of the variable will be the empty sequence
 * @param namespaceURI The namespace URI of the name of the variable. Supply "" to represent
 * names in no namespace (null is also accepted)
 * @param localName The local part of the name of the variable (an NCName)
 * @return an XPathVariable object representing information about the variable that has been
 * declared.
*/
public XPathVariable declareVariable(String namespaceURI, String localName) {
  XPathVariable var = XPathVariable.make(new StructuredQName("", namespaceURI, localName));
  StructuredQName qName = var.getVariableQName();
  int slot = variables.size();
  var.setSlotNumber(slot);
  variables.put(qName, var);
  return var;
}

代码示例来源:origin: net.sourceforge.saxon/saxon

/**
 * Get a Stack Frame Map containing definitions of all the declared variables. This will return a newly
 * created object that the caller is free to modify by adding additional variables, without affecting
 * the static context itself.
 */
public SlotManager getStackFrameMap() {
  SlotManager map = getConfiguration().makeSlotManager();
  XPathVariable[] va = new XPathVariable[variables.size()];
  for (Iterator v = variables.values().iterator(); v.hasNext();) {
    XPathVariable var = (XPathVariable)v.next();
    va[var.getLocalSlotNumber()] = var;
  }
  for (int i=0; i<va.length; i++) {
    map.allocateSlotNumber(va[i].getVariableQName());
  }
  return map;
}

代码示例来源:origin: net.sf.saxon/Saxon-HE

private XPathExecutable internalCompile(String source) throws SaxonApiException {
  try {
    env.getDecimalFormatManager().checkConsistency();
  } catch (net.sf.saxon.trans.XPathException e) {
    throw new SaxonApiException(e);
  }
  XPathEvaluator eval = evaluator;
  IndependentContext ic = env;
  if (ic.isAllowUndeclaredVariables()) {
    // self-declaring variables modify the static context. The XPathCompiler must not change state
    // as the result of compiling an expression, so we need to copy the static context.
    eval = new XPathEvaluator(processor.getUnderlyingConfiguration());
    ic = new IndependentContext(env);
    eval.setStaticContext(ic);
    for (Iterator iter = env.iterateExternalVariables(); iter.hasNext(); ) {
      XPathVariable var = (XPathVariable) iter.next();
      XPathVariable var2 = ic.declareVariable(var.getVariableQName());
      var2.setRequiredType(var.getRequiredType());
    }
  }
  try {
    XPathExpression cexp = eval.createExpression(source);
    return new XPathExecutable(cexp, processor, ic);
  } catch (XPathException e) {
    throw new SaxonApiException(e);
  }
}

代码示例来源:origin: net.sourceforge.saxon/saxon

/**
 * Get the slot number allocated to a particular variable
 * @param qname the name of the variable
 * @return the slot number, or -1 if the variable has not been declared
 */
public int getSlotNumber(QNameValue qname) {
  StructuredQName sq = qname.toStructuredQName();
  XPathVariable var = (XPathVariable)variables.get(sq);
  if (var == null) {
    return -1;
  }
  return var.getLocalSlotNumber();
}

代码示例来源:origin: org.opengis.cite.saxon/saxon9

SequenceType requiredType = variable.getRequiredType();
if (requiredType != SequenceType.ANY_SEQUENCE) {
  XPathException err = TypeChecker.testConformance(value, requiredType, contextObject);
contextObject.setLocalVariable(variable.getLocalSlotNumber(), value);

代码示例来源:origin: net.sf.saxon/Saxon-HE

/**
 * Declare a variable. A variable must be declared before an expression referring
 * to it is compiled. The initial value of the variable will be the empty sequence
 *
 * @param qName the name of the variable.
 * @return an XPathVariable object representing information about the variable that has been
 *         declared.
 * @since 9.2
 */
public XPathVariable declareVariable(StructuredQName qName) {
  XPathVariable var = variables.get(qName);
  if (var != null) {
    return var;
  } else {
    var = XPathVariable.make(qName);
    int slot = variables.size();
    var.setSlotNumber(slot);
    variables.put(qName, var);
    return var;
  }
}

代码示例来源:origin: net.sf.saxon/Saxon-HE

/**
 * Get the required item type of a declared variable in the static context of the expression.
 *
 * @param variableName the name of a declared variable
 * @return the required item type.
 *         <p>If the variable was explicitly declared, this will be the item type that was set when the
 *         variable was declared. If no item type was set, it will be {@link ItemType#ANY_ITEM}.</p>
 *         <p>If the variable was implicitly declared by reference (which can happen only when the
 *         <tt>allowUndeclaredVariables</tt> option is set), the returned type will be {@link ItemType#ANY_ITEM}.</p>
 *         <p>If no variable with the specified QName has been declared either explicitly or implicitly,
 *         the method returns null.</p>
 * @since 9.2
 */
/*@Nullable*/
public ItemType getRequiredItemTypeForVariable(QName variableName) {
  XPathVariable var = env.getExternalVariable(variableName.getStructuredQName());
  if (var == null) {
    return null;
  } else {
    return new ConstructedItemType(var.getRequiredType().getPrimaryType(), processor);
  }
}

代码示例来源:origin: net.sf.saxon/Saxon-HE

/**
 * Declare a variable as part of the static context for XPath expressions compiled using this
 * {@code XPathCompiler}. It is an error for the XPath expression to refer to a variable unless it has been
 * declared, unless the method {@link #setAllowUndeclaredVariables(boolean)} has been called to permit
 * undeclared variables. This method declares the existence of the variable, and defines the required type
 * of the variable, but it does not bind any value to the variable; that is done later,
 * when the XPath expression is evaluated.
 *
 * @param qname       The name of the variable, expressed as a {@link QName}
 * @param itemType    The required item type of the value of the variable, for example {@code ItemType.BOOLEAN}
 * @param occurrences The allowed number of items in the sequence forming the value of the variable
 */
public void declareVariable(QName qname, ItemType itemType, OccurrenceIndicator occurrences) {
  if (cache != null) {
    cache.clear();
  }
  XPathVariable var = env.declareVariable(qname.getNamespaceURI(), qname.getLocalName());
  var.setRequiredType(
      SequenceType.makeSequenceType(
          itemType.getUnderlyingItemType(), occurrences.getCardinality()));
}

代码示例来源:origin: org.apache.servicemix.bundles/org.apache.servicemix.bundles.saxon

SequenceType requiredType = variable.getRequiredType();
if (requiredType != SequenceType.ANY_SEQUENCE) {
  XPathException err = TypeChecker.testConformance(value, requiredType, contextObject);
int slot = variable.getLocalSlotNumber();
StructuredQName expectedName = slot >= stackFrameMap.getNumberOfVariables() ? null :
    stackFrameMap.getVariableMap().get(slot);
if (!variable.getVariableQName().equals(expectedName)) {
  throw new XPathException(
      "Supplied XPathVariable is bound to the wrong slot: perhaps it was created using a different static context");

代码示例来源:origin: net.sourceforge.saxon/saxon

/**
 * Declare a variable. A variable must be declared before an expression referring
 * to it is compiled. The initial value of the variable will be the empty sequence
 * @param namespaceURI The namespace URI of the name of the variable. Supply "" to represent
 * names in no namespace (null is also accepted)
 * @param localName The local part of the name of the variable (an NCName)
 * @return an XPathVariable object representing information about the variable that has been
 * declared.
*/
public XPathVariable declareVariable(String namespaceURI, String localName) {
  XPathVariable var = XPathVariable.make(new StructuredQName("", namespaceURI, localName));
  StructuredQName qName = var.getVariableQName();
  int slot = variables.size();
  var.setSlotNumber(slot);
  variables.put(qName, var);
  return var;
}

代码示例来源:origin: net.sf.saxon/Saxon-HE

/**
 * Get a Stack Frame Map containing definitions of all the declared variables. This will return a newly
 * created object that the caller is free to modify by adding additional variables, without affecting
 * the static context itself.
 */
public SlotManager getStackFrameMap() {
  SlotManager map = getConfiguration().makeSlotManager();
  XPathVariable[] va = new XPathVariable[variables.size()];
  for (XPathVariable var : variables.values()) {
    va[var.getLocalSlotNumber()] = var;
  }
  for (XPathVariable v : va) {
    map.allocateSlotNumber(v.getVariableQName());
  }
  return map;
}

代码示例来源:origin: org.apache.servicemix.bundles/org.apache.servicemix.bundles.saxon

private XPathExecutable internalCompile(String source) throws SaxonApiException {
  try {
    env.getDecimalFormatManager().checkConsistency();
  } catch (net.sf.saxon.trans.XPathException e) {
    throw new SaxonApiException(e);
  }
  XPathEvaluator eval = evaluator;
  IndependentContext ic = env;
  if (ic.isAllowUndeclaredVariables()) {
    // self-declaring variables modify the static context. The XPathCompiler must not change state
    // as the result of compiling an expression, so we need to copy the static context.
    eval = new XPathEvaluator(processor.getUnderlyingConfiguration());
    ic = new IndependentContext(env);
    eval.setStaticContext(ic);
    for (Iterator iter = env.iterateExternalVariables(); iter.hasNext(); ) {
      XPathVariable var = (XPathVariable) iter.next();
      XPathVariable var2 = ic.declareVariable(var.getVariableQName());
      var2.setRequiredType(var.getRequiredType());
    }
  }
  try {
    XPathExpression cexp = eval.createExpression(source);
    return new XPathExecutable(cexp, processor, ic);
  } catch (XPathException e) {
    throw new SaxonApiException(e);
  }
}

代码示例来源:origin: org.opengis.cite.saxon/saxon9

/**
 * Get the slot number allocated to a particular variable
 * @param qname the name of the variable
 * @return the slot number, or -1 if the variable has not been declared
 */
public int getSlotNumber(QNameValue qname) {
  StructuredQName sq = qname.toStructuredQName();
  XPathVariable var = (XPathVariable)variables.get(sq);
  if (var == null) {
    return -1;
  }
  return var.getLocalSlotNumber();
}

代码示例来源:origin: org.apache.servicemix.bundles/org.apache.servicemix.bundles.saxon

/**
 * Declare a variable. A variable must be declared before an expression referring
 * to it is compiled. The initial value of the variable will be the empty sequence
 *
 * @param qName the name of the variable.
 * @return an XPathVariable object representing information about the variable that has been
 *         declared.
 * @since 9.2
 */
public XPathVariable declareVariable(StructuredQName qName) {
  XPathVariable var = variables.get(qName);
  if (var != null) {
    return var;
  } else {
    var = XPathVariable.make(qName);
    int slot = variables.size();
    var.setSlotNumber(slot);
    variables.put(qName, var);
    return var;
  }
}

代码示例来源:origin: net.sf.saxon/Saxon-HE

/**
 * Get the required cardinality of a declared variable in the static context of the expression.
 *
 * @param variableName the name of a declared variable
 * @return the required cardinality.
 *         <p>If the variable was explicitly declared, this will be the occurrence indicator that was set when the
 *         variable was declared. If no item type was set, it will be {@link OccurrenceIndicator#ZERO_OR_MORE}.</p>
 *         <p>If the variable was implicitly declared by reference (which can happen only when the
 *         <tt>allowUndeclaredVariables</tt> option is set), the returned type will be
 *         {@link OccurrenceIndicator#ZERO_OR_MORE}.</p>
 *         <p>If no variable with the specified QName has been declared either explicitly or implicitly,
 *         the method returns null.</p>
 * @since 9.2
 */
public OccurrenceIndicator getRequiredCardinalityForVariable(QName variableName) {
  XPathVariable var = env.getExternalVariable(variableName.getStructuredQName());
  if (var == null) {
    return null;
  } else {
    return OccurrenceIndicator.getOccurrenceIndicator(var.getRequiredType().getCardinality());
  }
}

代码示例来源:origin: org.apache.servicemix.bundles/org.apache.servicemix.bundles.saxon

/**
 * Declare a variable as part of the static context for XPath expressions compiled using this
 * {@code XPathCompiler}. It is an error for the XPath expression to refer to a variable unless it has been
 * declared, unless the method {@link #setAllowUndeclaredVariables(boolean)} has been called to permit
 * undeclared variables. This method declares the existence of the variable, and defines the required type
 * of the variable, but it does not bind any value to the variable; that is done later,
 * when the XPath expression is evaluated.
 *
 * @param qname       The name of the variable, expressed as a {@link QName}
 * @param itemType    The required item type of the value of the variable, for example {@code ItemType.BOOLEAN}
 * @param occurrences The allowed number of items in the sequence forming the value of the variable
 */
public void declareVariable(QName qname, ItemType itemType, OccurrenceIndicator occurrences) {
  if (cache != null) {
    cache.clear();
  }
  XPathVariable var = env.declareVariable(qname.getNamespaceURI(), qname.getLocalName());
  var.setRequiredType(
      SequenceType.makeSequenceType(
          itemType.getUnderlyingItemType(), occurrences.getCardinality()));
}

代码示例来源:origin: net.sourceforge.saxon/saxon

SequenceType requiredType = variable.getRequiredType();
if (requiredType != SequenceType.ANY_SEQUENCE) {
  XPathException err = TypeChecker.testConformance(value, requiredType, contextObject);
int slot = variable.getLocalSlotNumber();
StructuredQName expectedName = (slot >= stackFrameMap.getNumberOfVariables() ? null :
    (StructuredQName)stackFrameMap.getVariableMap().get(slot));
if (!variable.getVariableQName().equals(expectedName)) {
  throw new XPathException(
      "Supplied XPathVariable is bound to the wrong slot: perhaps it was created using a different static context");

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com