webmagic
webmagic copied to clipboard
xpath not contains support
在 xpath 中 使用not contains 语法不支持 不知道有没有什么办法解决,在xsoup 0.3.1版本中的源码中 不支持,可以添加支持或者有其他方法吗 eg: xpath "//*[@class='mod-play-list']/li[not(contains(@class,'item-hold')]/a"
org.jsoup.select.Selector$SelectorParseException: Could not parse query 'li[not(contains(@class,'item-hold')]': unexpected token at 'not(contains(@class,'item-hold')'
at us.codecraft.xsoup.xevaluator.XPathParser.byFunction(XPathParser.java:260)
at us.codecraft.xsoup.xevaluator.XPathParser.consumePredicates(XPathParser.java:231)
at us.codecraft.xsoup.xevaluator.XPathParser.findElements(XPathParser.java:163)
at us.codecraft.xsoup.xevaluator.XPathParser.parse(XPathParser.java:76)
at us.codecraft.xsoup.xevaluator.XPathParser.parse(XPathParser.java:408)
at us.codecraft.xsoup.xevaluator.XPathParser.combinator(XPathParser.java:110)
at us.codecraft.xsoup.xevaluator.XPathParser.parse(XPathParser.java:74)
at us.codecraft.xsoup.xevaluator.XPathParser.parse(XPathParser.java:408)
at us.codecraft.xsoup.Xsoup.compile(Xsoup.java:25)
at us.codecraft.webmagic.selector.XpathSelector.
private static final Map<String, FunctionEvaluator> FUNCTION_MAPPING = new HashMap<String, FunctionEvaluator>();
static {
FUNCTION_MAPPING.put("contains", new FunctionEvaluator() {
@Override
public Evaluator call(String... param) {
Validate.isTrue(param.length == 2, String.format("Error argument of %s", "contains"));
return new Evaluator.AttributeWithValueContaining(param[0], param[1]);
}
});
FUNCTION_MAPPING.put("starts-with", new FunctionEvaluator() {
@Override
public Evaluator call(String... param) {
Validate.isTrue(param.length == 2, String.format("Error argument of %s", "starts-with"));
return new Evaluator.AttributeWithValueStarting(param[0], param[1]);
}
});
FUNCTION_MAPPING.put("ends-with", new FunctionEvaluator() {
@Override
public Evaluator call(String... param) {
Validate.isTrue(param.length == 2, String.format("Error argument of %s", "ends-with"));
return new Evaluator.AttributeWithValueEnding(param[0], param[1]);
}
});
}
我也遇到相同问题,但是没找到好的解决办法