java - 从 Java 发送 XPath 变量

标签 java xml xpath

我有一个搜索静态值的 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/

相关文章:

java- 如何告诉 LDAP DirContext.search(...).hasMore() 返回 false 而不是抛出 PartialResultException

java - 如何确定正在运行的 JVM 上的 MaxDirectMemorySize?

android - 如何将 Android 文本框设置为仅占 XML 总宽度的 60%?

java - 将不对称 XML 拆分为多个 XML

google-chrome - 从其他 DOM 元素开始,通过 XPath 查找 DOM 元素

JAVA Spring : Service returning a null

java - Jasper Reports 中的空白子报表

xml - 使用 XSLT 转换 XML

xml - 在Powershell中解析XML

xpath - 在给定兄弟之前、之后和之间转换混合文本和节点