我的背景:
在HTML清理方面,我是新手。自从我使用C#为html编写我唯一的工作以来已经有四年了。我使用C#进行的其他编码同样适用于在SQL Server数据库中操作数据的表单。
我尝试开始使用HTML Agility Pack(HAP):
我花了几天时间试图理解各种在线资源中有关如何开始使用HTML Agility Pack的说明。到目前为止我发现的一些内容如下:
到目前为止我的结果:
我发现这些材料对每个来源都很混乱,似乎告诉我一些不同的东西。我的所有尝试都已陷入死胡同。
为了能够有效地理清我的困惑并回复我的具体情况,我将在项目,环境和问题之下的三个部分进行描述;
我的项目
我的任务是创建一个从html文件中清除数据的进程。我很了解文件。这些文件将驻留在计算机本地的文件系统上。 html文件将由我们不拥有的进程在别处创建,并将放在我刚才提到的本地文件夹中。 (仅供参考 - 虽然它不是我问题的一部分,但我希望创建一个项目或应用程序,它将按计划运行以执行清理任务,然后将收集的数据输入数据库表。)
我的环境
如上所述,要处理的html文件将驻留在本地计算机上。 我在这台机器上新安装了Visual Studio 2010 Professional来为这个项目编写代码。 现在可以在文件共享上访问HTML Agility Pack。
在REGEIT下:HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework Setup \ NDP列出以下内容,表示此计算机上安装的.NET框架的版本;
我的问题
1。)有些网站告诉我下载HTML Agility Pack并使用文件“HtmlAgilityPack.dll”,但是zip文件包含9个文件夹,每个文件夹都有不同的文件副本。我想要哪一个?
以下是文件夹的名称;
2。)在stackoverflow.com/questions/846994/how-to-use-html-agility-pack上对论坛问题“如何使用HTML Agility Pack”的回答指示提问者“下载并构建HTML Agility Pack解决方案“,并将提问者引导到网站htmlagilitypack.codeplex.com,该网站随后有一个指向nuget.org/packages/HtmlAgilityPack的链接,该链接通过运行命令”PM>“来”安装“HTMLAgilityPack。 “包管理器控制台”中的“安装包HtmlAgilityPack”
这一切意味着什么?其他网站说要在bin文件夹中回合dll。那是什么告诉我要做的? 请详细解释,让我开始。
3.)假设我正在使用C#,我应该创建哪种项目?
4.请告诉我您认为适用于我的项目的任何其他资源。
答案 0 :(得分:1)
考虑到您在计算机上安装的.NET框架版本,您似乎可以创建.NET 4.0项目。什么类型的项目取决于您希望应用程序如何运行。我个人选择创建一个包含load html和scrub代码的C#类库项目,然后以你想用来实际打开文件的任何机制托管它。
要从FileSystem打开文件,请使用System.IO.File
中的File.OpenRead
或File.ReadAllText
。您可以将流或文件内容传递给HtmlDocument.Load/LoadHtml
方法。
HtmlDocument doc = new HtmlDocument();
// Use File.ReadAllText
string contents = File.ReadAllText("PathToFileName");
doc.LoadHtml(contents);
// Or use a stream
using (var contents = File.OpenRead("PathToFileName"))
{
doc.Load(contents);
}
托管的可能性很大。控制台应用程序(可以从命令行或通过任务计划程序调用),Windows服务(可以在Windows中加载,即使没有人登录到计算机也可以在后台运行,并且可以使用FileSystemWatcher
自动映射文件,或Windows Forms / WPF应用程序,让用户选择要处理的文件,然后以某种方式显示结果。
至于如何使用它,这是Html Agility Pack的主要问题之一。随着时间的推移增加了使用它的新方法,因此实际的库有几种方法可供使用。您可以采用旧式XPath查询路由(这是原始API),也可以使用Linq-to-HTML / XML路由(这是更新的方式)。两者都不比另一方好,它们都有其独特的优势。 XPath解决方案允许您轻松地将查询存储在文本文件中,因此它非常适合可配置的系统,而从开发人员的角度来看,Linq-To-HTML版本更容易实现。
至于如何下载它,这里也有很多选项。
Install-Package HtmlAgilityPack
命令,让Visual Studio下载并为您的项目安装适当版本的HTML Agility Pack。不用担心选择哪个库,Visual Studio会为您做到这一点。如果您已经完全安装了库,如何使用它取决于您所使用的HTML清理类型以及您是选择XPath还是Linq-to-HTML路由。但它通常归结为加载HTML文档:
HtmlDocument doc = new HtmlDocument();
doc.Load(/* path to file or stream */); or doc.LoadHtml(/*string*/);
加载文件并捕获可能发生的任何解析错误后,继续使用XPath查询HTML,例如内容实际上是XML(the XML/XPath documentation from MSDN actually applies here):
var nodes = doc.DocumentNode.SelectNodes("//table/tr/td");
使用Linq-to-HTML的相同查询:
var nodes = doc.DocumentNode.Descendants("table")
.Select(table => table.Elements("tr").Select(tr => tr.Elements("td")));
或者使用Linq-to-Html和Linq查询语法:
var tds = from tables in doc.DocumentNode.Descendants("table")
from tr in tables.Elements("tr")
from td in tr.Elements("td")
select td;
您可以根据需要进行搜索。语法类似于.NET Framework中的标准XPathnavigator
语法(使用SelectNodes
/ SelectSingleNode
/ Children
等)或Linq-to-XML语法(使用.Descendants
/ .Ancesters
/ .Element(s)
和标准Linq。
另见: