C# 使用agility pack解析html
我有一个html要解析(见下文) 有人能告诉我怎么做吗?基本上,我想做的是从html中获取上述标记中的所有电子邮件地址和链接C# 使用agility pack解析html,c#,html,parsing,html-agility-pack,C#,Html,Parsing,Html Agility Pack,我有一个html要解析(见下文) 有人能告诉我怎么做吗?基本上,我想做的是从html中获取上述标记中的所有电子邮件地址和链接 foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//tr[@onclick]")) { HtmlAttribute att = link.Attributes["onclick"]; Console.WriteLine(att.Value); } 编辑:我需要成对地将解析后的值存储在类(列表
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//tr[@onclick]"))
{
HtmlAttribute att = link.Attributes["onclick"];
Console.WriteLine(att.Value);
}
编辑:我需要成对地将解析后的值存储在类(列表)中。电子邮件(链接)和发件人电子邮件
public class ClassMailBox
{
public string From { get; set; }
public string LinkToMail { get; set; }
}
您可以编写以下代码:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(responseFromServer);
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//tr[@onclick]"))
{
HtmlAttribute att = link.Attributes["onclick"];
ClassMailBox classMailbox = new ClassMailBox() { LinkToMail = att.Value };
classMailBoxes.Add(classMailbox);
}
int currentPosition = 0;
foreach (HtmlNode tableDef in doc.DocumentNode.SelectNodes("//tr[@onclick]/td[1]"))
{
classMailBoxes[currentPosition].From = tableDef.InnerText;
currentPosition++;
}
为了使代码保持简单,我假设:
如果这些条件不适用,此代码将无法工作,并且可能引发一些异常(IndexOutOfRangeExceptions)或者它可能会将链接与错误的电子邮件地址相匹配。我也尝试过HtmlAgilityPack,但它不太支持XPath。您尝试过CssPath功能吗?@Tagyoureit我尝试过您的代码,它会打印两个tr项:location='readmail.html?mid=welcome'location='readmail.html?mid=T0wM6P'我正在使用.NET 4.5和HtmlAgilityPack 1.4.9。请检查responseFromServer变量中的html是否完整。谢谢你是对的,我在分析过时的HTML。下一个问题是如何获取发件人电子邮件地址?好的,我可以通过创建包含第一个td子项的第二个Xpath来获取电子邮件,您想在同一个查询上为td和tr创建Xpath,还是更喜欢为查询创建Xpath,并为td创建另一个Xpath,我建议这样做。是的,它非常有效。谢谢你抽出时间!你的假设是正确的(1和2)。
public class ClassMailBox
{
public string From { get; set; }
public string LinkToMail { get; set; }
}
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(responseFromServer);
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//tr[@onclick]"))
{
HtmlAttribute att = link.Attributes["onclick"];
ClassMailBox classMailbox = new ClassMailBox() { LinkToMail = att.Value };
classMailBoxes.Add(classMailbox);
}
int currentPosition = 0;
foreach (HtmlNode tableDef in doc.DocumentNode.SelectNodes("//tr[@onclick]/td[1]"))
{
classMailBoxes[currentPosition].From = tableDef.InnerText;
currentPosition++;
}