如何使Groovy Shell读取#符号

时间:2012-12-01 12:43:25

标签: compiler-errors groovyshell

我无法在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

我现在用谷歌搜索了这个异常一段时间,但是无法想出如何解决这个问题。也许有人已经经历过类似的情况,可以帮助我解决这个问题。

感谢。

1 个答案:

答案 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)")