使用HtmlAgilityPackparsingHTML页面

使用C#我想知道如何从这个示例html脚本获取文本框的值(即:约翰):

<TD class=texte width="50%"> <DIV align=right>Name :<B> </B></DIV></TD> <TD width="50%"><INPUT class=box value=John maxLength=16 size=16 name=user_name> </TD> <TR vAlign=center> 

有很多方法可以使用敏捷包select元素。

假设我们已经定义了我们的HtmlDocument ,如下所示:

 string html = @"<TD class=texte width=""50%""> <DIV align=right>Name :<B> </B></DIV></TD> <TD width=""50%""> <INPUT class=box value=John maxLength=16 size=16 name=user_name> </TD> <TR vAlign=center>"; HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); 

1.简单的LINQ
我们可以使用Descendants()方法,传递我们要search的元素的名称:

 var inputs = htmlDoc.DocumentNode.Descendants("input"); foreach (var input in inputs) { Console.WriteLine(input.Attributes["value"].Value); // John } 

2.更高级的LINQ
我们可以通过使用更好的LINQ来缩小这个范围:

 var inputs = from input in htmlDoc.DocumentNode.Descendants("input") where input.Attributes["class"].Value == "box" select input; foreach (var input in inputs) { Console.WriteLine(input.Attributes["value"].Value); // John } 

3. XPath
或者我们可以使用XPath 。

 string name = htmlDoc.DocumentNode .SelectSingleNode("//td/input") .Attributes["value"].Value; Console.WriteLine(name); //John 
 HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(html); XPathNavigator docNav = doc.CreateNavigator(); XPathNavigator node = docNav.SelectSingleNode("//td/input/@value"); if (node != null) { Console.WriteLine("result: " + node.Value); } 

我写得很快,所以你想用更多的数据做一些testing。

注意:XPathstring显然必须是小写的。

编辑:显然testing版现在直接支持Linq到对象,所以可能不需要转换器。