xpath中引用java变量,从Java发送XPath变量

I have an XPath expression that searches for a static value. In this example, "test" is that value:

XPathExpression expr = xpath.compile("//doc[contains(., 'test')]/*/text()");

How can I pass a variable instead of a fixed string? I use Java with Eclipse. Is there a way to use the value of a Java String to declare an XPath variable?

解决方案

You can define a variable resolver and have the evaluation of the expression resolve variables such as $myvar, for example:

XPathExpression expr = xpath.compile("//doc[contains(., $myVar)]/*/text()");

There's a fairly good explanation here. I haven't actually done this before myself, so I might have a go and provide a more complete example.

Update:

Given this a go, works a treat. For an example of a very simple implementation, you could define a class that returns the value for a given variable from a map, like this:

class MapVariableResolver implements XPathVariableResolver {

// local store of variable name -> variable value mappings

Map variableMappings = new HashMap();

// 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);

}

}

Now, declare and initialise an instance of this resolver in the program, for example

MapVariableResolver vr = new MapVariableResolver() ;

vr.setVariable("myVar", "text");

...

XPath xpath = factory.newXPath();

xpath.setXPathVariableResolver(vr);

Then, during evaluation of the XPath expression XPathExpression expr = xpath.compile("//doc[contains(., $myVar)]/*/text()");, the variable $myVar will be replaced with the string text.

Nice question, I learnt something useful myself!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值