如何使用HTML敏捷包?
我的XHTML文档不完全有效。所以我才想用它。如何在我的项目中使用它?我的项目是用c#编写的。
如何使用HTML敏捷包?
我的XHTML文档不完全有效。所以我才想用它。如何在我的项目中使用它?我的项目是用c#编写的。
当前回答
试试这个
string htmlBody = ParseHmlBody(dtViewDetails.Rows[0]["Body"].ToString());
private string ParseHmlBody(string html)
{
string body = string.Empty;
try
{
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
var htmlBody = htmlDoc.DocumentNode.SelectSingleNode("//body");
body = htmlBody.OuterHtml;
}
catch (Exception ex)
{
dalPendingOrders.LogMessage("Error in ParseHmlBody" + ex.Message);
}
return body;
}
其他回答
入门- HTML敏捷包
// From File
var doc = new HtmlDocument();
doc.Load(filePath);
// From String
var doc = new HtmlDocument();
doc.LoadHtml(html);
// From Web
var url = "http://html-agility-pack.net/";
var web = new HtmlWeb();
var doc = web.Load(url);
我不知道这对您是否有任何帮助,但我已经写了几篇介绍基础知识的文章。
HtmlAgilityPack文章系列 htmllagilitypack库简介 使用HtmlAgilityPack轻松从html片段中提取链接
下一篇文章已经完成了95%,我只需要对我所编写的最后几部分代码进行解释。如果你感兴趣,那么当我发布它时,我会尽量记得在这里发布。
试试这个
string htmlBody = ParseHmlBody(dtViewDetails.Rows[0]["Body"].ToString());
private string ParseHmlBody(string html)
{
string body = string.Empty;
try
{
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
var htmlBody = htmlDoc.DocumentNode.SelectSingleNode("//body");
body = htmlBody.OuterHtml;
}
catch (Exception ex)
{
dalPendingOrders.LogMessage("Error in ParseHmlBody" + ex.Message);
}
return body;
}
首先,在你的项目中安装HTMLAgilityPack nuget包。
然后,作为一个例子:
HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
// There are various options, set as needed
htmlDoc.OptionFixNestedTags=true;
// filePath is a path to a file containing the html
htmlDoc.Load(filePath);
// Use: htmlDoc.LoadHtml(xmlString); to load from a string (was htmlDoc.LoadXML(xmlString)
// ParseErrors is an ArrayList containing any errors from the Load statement
if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count() > 0)
{
// Handle any parse errors as required
}
else
{
if (htmlDoc.DocumentNode != null)
{
HtmlAgilityPack.HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("//body");
if (bodyNode != null)
{
// Do something with bodyNode
}
}
}
(注意:这个代码只是一个例子,不一定是最好的/唯一的方法。不要盲目地在自己的应用程序中使用它。)
HtmlDocument.Load()方法也接受一个流,这在与。net框架中其他面向流的类集成时非常有用。而htmlentity . deentitise()是另一个正确处理html实体的有用方法。(感谢马修)
HtmlDocument和HtmlNode是你最常用的类。与XML解析器类似,它提供了接受XPath表达式的selectSingleNode和selectNodes方法。
请注意HtmlDocument.Option??????布尔属性。它们控制Load和LoadXML方法如何处理HTML/XHTML。
还有一个编译过的帮助文件,叫做HtmlAgilityPack。CHM,它对每个对象都有完整的引用。这通常位于解决方案的基本文件夹中。
HtmlAgilityPack使用XPath语法,尽管许多人认为它的文档记录很差,但在XPath文档https://www.w3schools.com/xml/xpath_syntax.asp的帮助下,我使用它没有任何困难
解析
<h2>
<a href="">Jack</a>
</h2>
<ul>
<li class="tel">
<a href="">81 75 53 60</a>
</li>
</ul>
<h2>
<a href="">Roy</a>
</h2>
<ul>
<li class="tel">
<a href="">44 52 16 87</a>
</li>
</ul>
我是这样做的:
string url = "http://website.com";
var Webget = new HtmlWeb();
var doc = Webget.Load(url);
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//h2//a"))
{
names.Add(node.ChildNodes[0].InnerHtml);
}
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//li[@class='tel']//a"))
{
phones.Add(node.ChildNodes[0].InnerHtml);
}