Se puede definir una resolución variable y tener la evaluación de las variables de la expresión resolver como $myvar
, por ejemplo:
XPathExpression expr = xpath.compile("//doc[contains(., $myVar)]/*/text()");
Hay una bastante buena explicación here. En realidad, no he hecho esto antes de mí mismo, así que podría probarlo y dar un ejemplo más completo.
Actualización:
Dada esta una oportunidad, trabaja un convite. Para un ejemplo de una implementación muy sencilla, se podría definir una clase que devuelve el valor de una variable dada de un mapa, así:
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);
}
}
Ahora, declarar e inicializar una instancia de esta resolución en el programa, por ejemplo
MapVariableResolver vr = new MapVariableResolver() ;
vr.setVariable("myVar", "text");
...
XPath xpath = factory.newXPath();
xpath.setXPathVariableResolver(vr);
Entonces, durante la evaluación de la expresión XPath XPathExpression expr = xpath.compile("//doc[contains(., $myVar)]/*/text()");
, la variable $myVar
será reemplazado por la cadena text
.
¡Buena pregunta, aprendí algo útil!
me parece procesos en línea sencilla de variables un poco engorroso, en comparación con la posibilidad de utilizar las variables reales. Además, tendrá que pensar en la integridad sintáctica (por ejemplo, ¿qué pasa si 'myVar' contiene comillas? Etc.) –