我有一个XPath表达式,用于搜索静态值.在此示例中,"test"是该值:
XPathExpression expr = xpath.compile("//doc[contains(., 'test')]/*/text()");
Run Code Online (Sandbox Code Playgroud)
如何传递变量而不是固定字符串?我在Eclipse中使用Java.有没有办法使用Java的值String来声明XPath变量?
bra*_*ter 18
您可以定义变量解析器并对表达式求解变量进行评估$myvar,例如:
XPathExpression expr = xpath.compile("//doc[contains(., $myVar)]/*/text()");
有一个相当不错的解释在这里.我之前并没有真正做到这一点,所以我可能会去做一个更完整的例子.
更新:
鉴于这一点,一个好吃的.对于一个非常简单的实现的示例,您可以定义一个类,该类从地图返回给定变量的值,如下所示:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,例如,在程序中声明并初始化此解析程序的实例
MapVariableResolver vr = new MapVariableResolver() ;
vr.setVariable("myVar", "text");
...
XPath xpath = factory.newXPath();
xpath.setXPathVariableResolver(vr);
Run Code Online (Sandbox Code Playgroud)
然后,在评估XPath表达式期间XPathExpression expr = xpath.compile("//doc[contains(., $myVar)]/*/text()");,变量$myVar将替换为字符串text.
好问题,我自学了一些有用的东西!
| 归档时间: |
|
| 查看次数: |
7627 次 |
| 最近记录: |