Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 执行存储的CSQ查询_C# 4.0_Csquery - Fatal编程技术网

C# 4.0 执行存储的CSQ查询

C# 4.0 执行存储的CSQ查询,c#-4.0,csquery,C# 4.0,Csquery,我正在尝试创建一个爬虫程序,在那里我需要能够执行不同的查询,以从爬虫页面中提取不同类型的数据。我一直在研究CsQuery来提取数据,当我有一个简单的CSS选择器作为 h4:包含('texstring') 我的问题是,我需要能够评估以下复杂查询: [“h4:contains('textstring')”].Parent().Parent().Find(“div”).Find(“span”).Text() 我还没有找到任何好的解决办法。CsQuery可以轻松地完成上述操作,但前提是我要在代码中编写它

我正在尝试创建一个爬虫程序,在那里我需要能够执行不同的查询,以从爬虫页面中提取不同类型的数据。我一直在研究CsQuery来提取数据,当我有一个简单的CSS选择器作为

h4:包含('texstring')

我的问题是,我需要能够评估以下复杂查询:

[“h4:contains('textstring')”].Parent().Parent().Find(“div”).Find(“span”).Text()

我还没有找到任何好的解决办法。CsQuery可以轻松地完成上述操作,但前提是我要在代码中编写它,并且因为我希望能够执行保存在数据库中的查询,所以我需要能够动态加载和执行查询。 我目前最好的想法是让递归函数一次遍历语句一个点,但这将导致对函数的6次调用,以便能够执行上述查询。似乎我最终会创建CsQuery中已经存在的功能,但我想不出一种更优雅的方法来解决这些问题


任何想法都将不胜感激。

有几种方法可以做到这一点。首先,可以使用反射和正则表达式将数据库中的c#字符串转换为表达式。有很多小项目可以做这件事。另一种选择是托管一个脚本环境,如iron python或jint,并使用其中之一编写表达式。第三个选项是使用codedom并计算保存的字符串,然后转换为程序集。每种选择都有利弊

第一个选项使用反射,反射速度可能非常慢。但是你可以用c#native。第二个选项使用另一种语言,需要设置脚本环境。但对于非编程人员来说,为其开发表达式可能更容易。第三个选项要求每次表达式更改时创建一个新程序集,但无法卸载。但是这个选项可能是处理速度最快的


就我个人而言,我将主持jint,以降低网络爱好者的学习曲线,如果您只需要正确的CLR和csquery库访问,那么它的环境设置将相当简单。

谢谢,我将查看您描述的选项:)