我有一个搜索静态值的 XPath 表达式。在此示例中,“test”是该值:
XPathExpression expr = xpath.compile("//doc[contains(., 'test')]/*/text()");
如何传递变量而不是固定字符串?我在 Eclipse 中使用 Java。有没有办法使用 Java String
的值来声明 XPath 变量?
最佳答案
您可以定义一个变量解析器,并对表达式求值解析变量,例如$myvar
,例如:
XPathExpression expr = xpath.compile("//doc[contains(., $myVar)]/*/text()");
有一个很好的解释here .我自己之前实际上并没有这样做过,所以我可能会尝试并提供一个更完整的示例。
更新:
试一试,大有作为。作为一个非常简单的实现示例,您可以定义一个类,该类返回映射中给定变量的值,如下所示:
class MapVariableResolver implements XPathVariableResolver {
// local store of variable name -> variable value mappings
Map<String, String> variableMappings = new HashMap<String, String>();
// a way of setting new variable mappings
public void setVariable(String key, String value) {
variableMappings.put(key, value);
}
// override this method in XPathVariableResolver to
// be used during evaluation of the XPath expression
@Override
public Object resolveVariable(QName varName) {
// if using namespaces, there's more to do here
String key = varName.getLocalPart();
return variableMappings.get(key);
}
}
现在,例如在程序中声明并初始化这个解析器的一个实例
MapVariableResolver vr = new MapVariableResolver() ;
vr.setVariable("myVar", "text");
...
XPath xpath = factory.newXPath();
xpath.setXPathVariableResolver(vr);
然后,在计算 XPath 表达式 XPathExpression expr = xpath.compile("//doc[contains(., $myVar)]/*/text()");
时,变量$myVar
将替换为字符串 text
。
好问题,我自己学到了一些有用的东西!
关于java - 从 Java 发送 XPath 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3170887/