Análisis de la página HTML con HtmlAgilityPack

Utilizando C # Me gustaría saber cómo obtener el valor de Textbox (es decir: john) de este script html de muestra:

 
Name :

Hay varias maneras de seleccionar elementos usando el paquete de agilidad.

Supongamos que hemos definido nuestro HtmlDocument siguiente manera:

 string html = @" 
Name :
"; HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html);

1. Simple LINQ
Podríamos usar el método Descendants() , pasando el nombre de un elemento que estamos buscando:

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

2. LINQ más avanzado
Podríamos reducir eso utilizando LINQ más elegante:

 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
O podríamos usar 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); } 

Escribí esto bastante rápido, así que querrás hacer algunas pruebas con más datos.

NOTA: las cadenas XPath aparentemente tienen que estar en minúsculas.

EDITAR: Al parecer, la versión beta ahora admite Linq to Objects directamente, por lo que probablemente no sea necesario el convertidor.