use of org.seimicrawler.xpath.core.XpathProcessor in project JsoupXpath by zhegexiaohuozi.
the class JXDocument method selN.
public List<JXNode> selN(String xpath) {
List<JXNode> finalRes = new LinkedList<>();
try {
CharStream input = CharStreams.fromString(xpath);
XpathLexer lexer = new XpathLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
XpathParser parser = new XpathParser(tokens);
parser.setErrorHandler(new DoFailOnErrorHandler());
ParseTree tree = parser.main();
XpathProcessor processor = new XpathProcessor(elements);
XValue calRes = processor.visit(tree);
if (calRes == null) {
finalRes.add(JXNode.create(""));
return finalRes;
}
if (calRes.isElements()) {
for (Element el : calRes.asElements()) {
finalRes.add(JXNode.create(el));
}
return finalRes;
}
if (calRes.isList()) {
for (String str : calRes.asList()) {
finalRes.add(JXNode.create(str));
}
return finalRes;
}
if (calRes.isString()) {
finalRes.add(JXNode.create(calRes.asString()));
return finalRes;
}
if (calRes.isNumber()) {
Class vType = calRes.valType();
if (vType.isAssignableFrom(Long.class) || vType.isAssignableFrom(Integer.class)) {
finalRes.add(JXNode.create(calRes.asLong()));
} else {
finalRes.add(JXNode.create(calRes.asDouble()));
}
return finalRes;
}
if (calRes.isBoolean()) {
finalRes.add(JXNode.create(calRes.asBoolean()));
return finalRes;
}
if (calRes.isDate()) {
finalRes.add(JXNode.create(calRes.asDate()));
return finalRes;
}
finalRes.add(JXNode.create(calRes.asString()));
} catch (Exception e) {
String msg = "Please check the syntax of your xpath expr or commit a Issue. ";
throw new XpathSyntaxErrorException(msg + ExceptionUtils.getRootCauseMessage(e), e);
}
return finalRes;
}
use of org.seimicrawler.xpath.core.XpathProcessor in project JsoupXpath by zhegexiaohuozi.
the class ExprTest method exp.
@Test
public void exp() {
String xpath = "//a[@id]/@href";
CharStream input = CharStreams.fromString(xpath);
XpathLexer lexer = new XpathLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
XpathParser parser = new XpathParser(tokens);
parser.setErrorHandler(new DoFailOnErrorHandler());
ParseTree tree = parser.main();
XpathProcessor processor = new XpathProcessor(root);
XValue value = processor.visit(tree);
logger.info("visit res = {}", value);
}
Aggregations