35

Using C# I would like to know how to get the Textbox value (i.e: john) from this sample html script :

<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> 

2 Answers 2

52

There are a number of ways to select elements using the agility pack.

Let's assume we have defined our HtmlDocument as follows:

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. Simple LINQ
We could use the Descendants() method, passing the name of an element we are in search of:

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

2. More advanced LINQ
We could narrow that down by using fancier 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
Or we could use XPath.

string name = htmlDoc.DocumentNode .SelectSingleNode("//td/input") .Attributes["value"].Value; Console.WriteLine(name); //John 
Sign up to request clarification or add additional context in comments.

1 Comment

LINQ: In the case where the attribute was not there I used the following linq for where input.Attributes["class"] != null && input.Attributes["class"].Value == "box"
2
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); } 

I wrote this pretty quickly, so you'll want to do some testing with more data.

NOTE: The XPath strings apparently have to be in lower-case.

EDIT: Apparently the beta now supports Linq to Objects directly, so there's probably no need for the converter.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.