HtmlAgilityPack to get data from HTML table in C# - c#

Using HtmlAgilityPack, how to get data from input hidden values and tr, td rate in C# from HTML table?
I need to input hidden values to tr, td rate. How to get that information my below html table?
<table>
<caption>
<div id="cal_nav"
class="float_right">
<ul class="inline">
<li>
<a href="#"
onClick="changeRatesView('calendar')">Calendar View</a>
</li>
<li id="previous"
class="first">
<a title="September"
- "2015"
href="#"
onClick="searchPrevMonthAvailability()"> </a>
</li>
</div>
</caption>
<thead>
<tr>
<th>Date</th>
<th>Occupancy</th>
<th>Net Rate</th>
<th>Sell Rate</th>
</tr>
</thead>
<tbody>
<input type="hidden"
name="rateid"
value="234154166">
<tr>
<td>1</td>
<td>single</td>
<td>1652</td>
<td>2500</td>
</tr>
<tr>
<td>2</td>
<td>single</td>
<td>1454</td>
<td>4344</td>
</tr>
<input type="hidden"
name="rateid"
value="234154134">
<tr>
<td>1</td>
<td>single</td>
<td>1652</td>
<td>2500</td>
</tr>
<tr>
<td>2</td>
<td>single</td>
<td>1454</td>
<td>4344</td>
</tr>
<input type="hidden"
name="rateid"
value="234154145">
<tr>
<td>1</td>
<td>single</td>
<td>1652</td>
<td>2500</td>
</tr>
<tr>
<td>2</td>
<td>single</td>
<td>1454</td>
<td>4344</td>
</tr>
</tbody>
</table>
MY Linq code:
var tds= (from td in doc.DocumentNode.Descendants("table")
select td).ToList()[2].ChildNodes[2];
var trer = tdsyh.SelectNodes("//input[#type='hidden' and #name='rateid']|tr").Select(x => x).ToList();

You can try something like:
var hiddenFields = doc.DocumentNode.Descendants("input").Where(_ => _.GetAttributeValue("type", "").Equals("hidden") && _.Name.Equals("rateid"));

Related

Add tbody XML Element to table Element in XDcoument

Want to add <tbody> element in <table> elements if missing on Xdcoument.
<table class="newtable" id="item_559_Table1" cellpadding="0" cellspacing="0" data-its-style="width:11.4624em; border-spacing:0;">
<colgroup data-its-style="width:11.4624em; " />
<tr>
<td data-its-style="padding:0.2292em; vertical-align:top; ">
<p data-its-style="">My dad cooks up a pot of chicken soup, and</p>
</td>
</tr>
<tr>
<td data-its-style="padding:0.2292em; vertical-align:top; ">
<p data-its-style="font-weight:normal; ">This cold means I can’t taste a thing today!</p>
</td>
</tr>
</table>
Output should look like
<table class="newtable" id="item_559_Table1" cellpadding="0" cellspacing="0" data-its-style="width:11.4624em; border-spacing:0;">
<colgroup data-its-style="width:11.4624em; " />
<tbody>
<tr>
<td data-its-style="padding:0.2292em; vertical-align:top; ">
<p data-its-style="">My dad cooks up a pot of chicken soup, and</p>
</td>
</tr>
<tr>
<td data-its-style="padding:0.2292em; vertical-align:top; ">
<p data-its-style="font-weight:normal; ">This cold means I can’t taste a thing today!</p>
</td>
</tr>
</tbody>
</table>
**Not looking for XSLT solution.
One way to do it would be to grab the children of <table>, then add them back they way you want them.
var doc = XDocument.Load("file.xml");
var colgroup = doc.Root.Elements("colgroup");
var tr = doc.Root.Elements("tr");
// Add tr to tbody
var tbody = new XElement("tbody", tr);
// Replace the children of table with colgroup and tbody
doc.Root.ReplaceNodes(colgroup, tbody);

Passing a list from Controller to View in ASP.NET MVC 4

I have an Index action method as follows.I am passing a list of Providers to the View.
public ActionResult Index()
{
Provider providerList = new Provider();
List<Provider> providers = DAL.GetListofProviders.ToList();
return View(providers);
}
In the View,I have the following code to receive the List of Providers.
#model IEnumerable<DEMO_JAN14.Models.Provider>
#{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<head>
<title>LIST OF PROVIDERS</title>
</head>
<body>
<table class="table table-striped table-bordered table-hover">
<tr>
<th>Provider Type</th>
<th>First Name</th>
<th>Last Name</th>
<th>Certification</th>
<th>Specialization</th>
<th>SSN</th>
<th>Facility Name</th>
<th>Contact No</th>
<th>Contact Email</th>
<th></th>
</tr>
<tbody data-bind="foreach: viewmodel">
<tr>
<td class="col-lg-2" data-bind="text: ProviderType"></td>
<td class="col-lg-1" data-bind="text: FirstName"></td>
<td class="col-lg-1" data-bind="text: LastName"></td>
<td class="col-lg-1" data-bind="text: Certification"></>
<td class="col-lg-1" data-bind="text: Specialization"></td>
<td class="col-lg-1" data-bind="text: SSN"></td>
<td class="col-lg-4" data-bind="text: FacilityName"></td>
<td class="col-lg-4" data-bind="text: ContactNumber"></td>
<td class="col-lg-1" data-bind="text: ContactEmail"></td>
<td><a class="btn btn-danger" id="del" onclick = "return confirm('Are you sure, you want to delete');" data-bind="attr: { href: '/Provider/Delete/' + ProviderID }"> Delete </a>
</td>
</tr>
</tbody>
I see the list of Providers in the controller
But I dont see the same list in the view as shown
Am I doing something wrong.Please guide me in the right directions.Thanks.
You can iterate like this (using your code)
#model IEnumerable<DEMO_JAN14.Models.Provider>
#{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<head>
<title>LIST OF PROVIDERS</title>
</head>
<body>
<table class="table table-striped table-bordered table-hover">
<tr>
<th>#Html.DisplayNameFor(m => m.ProviderType)</th>
<th>#Html.DisplayNameFor(m => m.FirstName)</th>
...
</tr>
#foreach (var item in Model)
<tr>
<td class="col-lg-2">#Html.DisplayFor(modelItem => item.ProviderType)</td>
<td class="col-lg-1">#Html.DisplayFor(modelItem => item.FirstName)</td>
...
</tr>
</table>
</body>
To check the count of the providers list inside the view use the following property #Model
In your view you can iterate like this on the items, and for example am displaying FirstName of each Provider in the List:
#foreach(var item in Model)
{
<h1>#item.FirstName </h1>
}
Using your html:
<tbody data-bind="foreach: viewmodel">
#foreach(var item in Model)
{
<tr>
<td class="col-lg-2">#item.ProviderType</td>
<td class="col-lg-1">#item.FirstName</td>
........................................
........................................
// and so on other properties
<td><a class="btn btn-danger" id="del" onclick = "return confirm('Are you sure, you want to delete');" href="#Url.Action("Delete","Provider")+ item.ProviderID }"> Delete </a>
</td>
</tr>
you can't access the razor Model object via knockout
you need to receive your data as json result
please refer to this article
http://www.codeproject.com/Articles/424642/Customer-KnockoutJS-and-MVC-demo-using-JSON

How to create html template and how to send them through email without attachment

currently am working in asp.net c#..one of my client wants to send html template through email donot as attachment ..so i created attachment like this
please refer the html code
<!DOCTYPE html>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<title>saloc</title>
</head>
<body>
<div>
<table style='width:90%; border:3px solid #C0C0C0;'>
<tbody align:'center';>
<tr>
<td align:'center'>
<table style='width:100%;padding:0;'>
<tbody>
<tr>
<td align:'left'>
<table style='width:100%;padding:0;'>
<tbody>
<tr>
<td align:'left'>
<table style='width: 100%;border:0;padding:0';>
<tbody>
<td align:'left' valign='top' style= 'width:15%';><img src='data:image/jpeg;base64,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' style='margin-left: 0px;'/>
</td>
</tr>
<tr>
<td> <div style='border-bottom:5px solid #808080;'></div></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<table style='width:100%;padding:5px;word-spacing:0'>
<tbody><tr>
<td align:'left'>
<table style='width:100%;height:10px;'valign:'top''>
<tbody>
<tr>
<td align:'left'><div style='display:none;'></div>
<h2>ihigjkj</h2>
<div style='display: block;top: -105px;'></div>
<table style='width:100%; height: 178px;'>
<tbody><tr>
<td align:'left'>
<table style='width:100%;' border='0'>
<tbody>
<tr>
<td align:'left' valign:'top' style='width: 15%;'>
</td>
<!--<td align:'left' style='width: 5%;' valign:'top'>
</td>-->
<td align:'left' style='width: 80%;color:#303338;text-align:justify;word-wrap: break-word;' valign:'top'>
<p>jkgnbkvnkvb</p>
<!--<a href='http://www.ymlp.com/'>This is a link to some related web page...</a><a href='http://www.ymlp.com/'></a>-->
</td>
</tr>
<tr>
<td><hr /></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody></table>
<!--<table style='width:100%'>
<tbody>
<tr>
<td align:'left'>
</td>
</tr>
</tbody></table>-->
<table width:'100%'>
<tbody><tr>
<td align:'left'>
<div>
<h2>kvnmvbmbvm</h2>
</div>
</td>
</tr>
</tbody></table>
<table width:'100%'>
<tbody><tr>
<td align:'left'>
<table style='width: 100%;' border='0'>
<tbody><tr>
<td align:'left' style='width:80%;text-align:justify;word-wrap:break-word;color:#303338'; valign='top';>
<p>jgknkbnvnbvm,nb,mbv</p><br>
<!-- <a href='http://www.ymlp.com/'>This is a link to some related web page...</a><a href='http://www.ymlp.com/'></a>-->
</td>
<!--<td align:'left' style='width: 5%;' valign:'top'>
</td>-->
<td align:'left' style='width:15%;' valign:'top'>
<a href='http://www.saloc.in'> </td>
</tr>
<tr>
<td><hr /></td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
<table style='padding:0px;width:100%';'>
<tbody><tr>
<td align:'left'><h3>nngnbvmn,</h3>
</td>
</tr>
</tbody></table>
<table style='width:100%';>
<tbody><tr>
<td align:'left'>
<div style='text-align:justify;word-wrap:break-word;color:#303338';'>
<p>jgknkbnvnbvm,nb,mbv</p>
<br /> </div>
<div style='color:#003E61';'font-size:15px;font-family:'Times New Roman';> <hr/>
<span style='color:#CA3B2A'><b>SALOC Technologies PVT Ltd,</b></style></span><br/>
<b>#274/14,New Guddadahali Mysore Road,Bengaluru-560026,INDIA</b><br/>
<b> Voice:+91 80 2675 5000,Fax:+90 80 2674 7000</b><br />
<a href='mailto:shivananda#saloc.in'>shivananda#saloc.in</a>
</div>
<div>
</div>
<div style='color:green;text-align:center;border-top:dotted thin #C0C0C0;font-size:18px'>
<br />
<b><i>Business for mutual benefits</i></b><br />
<!--style='border-top:dotted thin #C0C0C0;'-->To Unsubscribe Click here<a href='mailto:shivananda#saloc.in'>:shivananda#saloc.in</a>
</div>
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
<!--<table width:'100%' cellpadding='4' cellspacing='0'>
<tbody><tr>
<td align:'left' >
<div style='font-size: 8px;'>
</div>
</td>
</tr>
</tbody></table>-->
</td>
</tr>
</tbody></table>
<!--<table style='width:600px' border='0' height:'30px'>
<tbody><tr>
<td align:'left'>
<div style='font-size: 8px;'>
</div>
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>-->
</table>
</div>
</body>
</html>
it looks very big but here one thing u make sure am storing image in byte array ..until now am not facing any problem .the created html template above is looking good if u want to see please paste in notepad as html then open it browser then u come to know ..fine actually when i send this template as attachment in gmail,after send email i get only text content as dis located manner mean not as original style but content not styles all are showing without style ....and one more criteria is our clients wants to see the html template directly on mail body not as attachment..please let me know how do i solve these problems i wish i'll get perfect solution about this because i trust stack overflow ...please help your help would be greatly appreciated
I suggested you to upload the image to web server and change the image path in the html file something like http://domainname.com/imageName.jpg.
Code
StreamReader reader = new StreamReader(Server.MapPath("~/emailer.html"));
string readFile = reader.ReadToEnd();
string myString = "";
myString = readFile;
string mailServer, mailFrom;
int port;
string mailId, mailPass;
string subject;
string mailTo;
try
{
subject = "Subject";
mailTo = "receipient#gmail.com";
mailServer = "smtp.gmail.com";
mailFrom = "Mail From Text";
mailId = "sender#gmail.com";
mailPass = "xxxxxx";
port = 587;
MailMessage mail = new MailMessage(mailId, mailTo, subject, myString.ToString());
mail.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient(mailServer, port);
System.Net.NetworkCredential nc = new System.Net.NetworkCredential(mailId, mailPass);
smtp.UseDefaultCredentials = false;
smtp.Credentials = nc;
smtp.EnableSsl = true;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Send(mail);
ScriptManager.RegisterStartupScript(this, this.GetType(), "alertmessage", "javascript:alert('Submitted successfully')", true);
}
catch(Exception ex){ }
Change subject, mailTo,mailFrom, mailId, Password as per yours.

How to read <table> into 'onmouseover' event with C# and HTMLAgilityPack

How to read <table> into onmouseover event with C# and HTMLAgilityPack?
markup code :
<a href="#" class="chan_live_not_free" onclick="return false;" onmouseover="return overlib('
<table>
<tr class=fieldRow>
<td class=posH_col width=40>
<strong>pos</strong>
</td>
<td class=rest_col width=90>
<strong>satellite</strong>
</td>
<td class=freqH_col width=50>
<strong>freq</strong>
</td>
<td class=rest_col width=90>
<strong>symbol</strong>
</td>
<td class=rest_col width=90>
<strong>encryption</strong>
</td>
</tr>
<tr>
<td class="pos_col">39.0°e</td>
<td class=rest_col>Hellas Sat 2</td>
<td class="freq_col">12.606 H</td>
<td class=rest_col>30000 - 2/3</td>
<td class=enc_not_live>MPEG-4 BulCrypt</td>
</tr>
</table>',CAPTION, 'Arena Sport 4 (serbia) – 19/10/14 - 11:30');" onmouseout="return nd();">
Arena Sport 4 (serbia)
</a>
I need to read the table into onmouseover event. How does it read?
You could get the element attribute of the <a> tag with HTML Agility Pack and then using regular expressions get the <table> inside the string, something like the following code :
var html = #"<a href='#' class='chan_live_not_free' onclick='return false;' onmouseover='return overlib(
<table>
<tr class=fieldRow>
<td class=posH_col width=40>
<strong>pos</strong>
</td>
<td class=rest_col width=90>
<strong>satellite</strong>
.
.
.
<tr>
<td class="pos_col">39.0°e</td>
<td class=rest_col>Hellas Sat 2</td>
<td class="freq_col">12.606 H</td>
<td class=rest_col>30000 - 2/3</td>
<td class=enc_not_live>MPEG-4 BulCrypt</td>
</tr>
</table>,CAPTION, 'Arena Sport 4 (serbia) – 19/10/14 - 11:30');' onmouseout='return nd();'>
Arena Sport 4 (serbia)
</a>";
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
var value = doc.DocumentNode.SelectSingleNode("//a[#class='chan_live_not_free']").Attributes["onmouseover"].Value;
var text = Regex.Matches(value, #"<table>([^)]*)</table>")[0].Value;

How to get the count of tables in an html file with C# and html-agility-pack

This is a newbie question so please provide working code.
How do I count the tables in an html file using C# and the html-agility-pack?
(I will need to get values from specific tables in an html file based on the count of tables. I will then perform some math on the values retrieved.)
Here is a sample file with three tables for your convenience:
<html>
<head>
<title>Tables</title>
</head>
<body>
<table border="1">
<tr>
<th>Name</th>
<th>Phone</th>
<th>City</th>
<th>Number</th>
</tr>
<tr>
<td>Scott</td>
<td>555-2345</td>
<td>Chicago</td>
<td>42</td>
</tr>
<tr>
<td>Bill</td>
<td>555-1243</td>
<td>Detroit</td>
<td>23</td>
</tr>
<tr>
<td>Ted</td>
<td>555-3567</td>
<td>Columbus</td>
<td>9</td>
</tr>
</table>
<p></p>
<table border="1">
<tr>
<th>Name</th>
<th>Year</th>
</tr>
<tr>
<td>Abraham</td>
<td>1865</td>
</tr>
<tr>
<td>Martin</td>
<td>1968</td>
</tr>
<tr>
<td>John</td>
<td>1963</td>
</tr>
</table>
<p></p>
<table border="1">
<tr>
<th>Animal</th>
<th>Location</th>
<th>Number</th>
</tr>
<tr>
<td>Tiger</td>
<td>Jungle</td>
<td>8</td>
</tr>
<tr>
<td>Hippo</td>
<td>River</td>
<td>4</td>
</tr>
<tr>
<td>Camel</td>
<td>Desert</td>
<td>3</td>
</tr>
</table>
</body>
</html>
If you would, please SHOW how to send the results to a new text file.
Thanks!
I think this can be a starting point
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
var tables = doc.DocumentNode.Descendants("table");
int tablesCount = tables.Count();
foreach (var table in tables)
{
var rows = table.Descendants("tr")
.Select(tr => tr.Descendants("td").Select(td => td.InnerText).ToList())
.ToList();
foreach(var row in rows)
Console.WriteLine(String.Join(",", row));
}
Something like this:
HtmlDocument doc = new HtmlDocument();
doc.Load(myTestFile);
// get all TABLE elements recursively
int count = doc.DocumentNode.SelectNodes("//table").Count;
// output to a text file
File.WriteAllText("output.txt", count.ToString());

Categories