我无法在groovy中编译以下代码。
String execute(Document doc){
CompilerConfiguration configuration = new CompilerConfiguration()
configuration.setSourceEncoding("UTF-8")
binding = new Binding();
binding.setVariable("doc", doc)
shell = new GroovyShell(binding, configuration)
String clipping = shell.evaluate("doc."+jsoupExpression+".text()")
return clipping
}
这是我在调用我的函数时应该执行的操作:
//Use a document from test/resources as input
Document doc = Jsoup.parse(new File("test/resources/online.html"), "UTF-8")
//This is what gets passed as jsoupExpression
Rule r = new Rule("select(div#unten div h2).get(1)")
String result = r.execute(doc)
我得到的是这个例外:
| Failure: testExecute(com.threefact.scrapetastic.RuleTests)
| org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script1.groovy: 1: unexpected char: '#' @ line 1, column 15.
doc.select(div#unten div h2).get(1).text()
^
1 error
我现在用谷歌搜索了这个异常一段时间,但是无法想出如何解决这个问题。也许有人已经经历过类似的情况,可以帮助我解决这个问题。
感谢。
答案 0 :(得分:1)
问题在于这一行:
Rule r = new Rule("select(div#unten div h2).get(1)")
当您分离规则时,您将获得此程序:
select(div#unten div h2).get(1)
我认为你想将一个字符串参数传递给select
,所以这将是正确的程序:
select("div#unten div h2").get(1)
这意味着Rule r
行应写成如下:
Rule r = new Rule("select(\"div#unten div h2\").get(1)")