|
I want to parse multiple html table using htmlagility pack. i want to iterate in all TD and extract values.
please have a look at this url https:
the above url has many tabular data whose html tables i have to parse.
here i am pasting a small snippet of html table. please check how data is stored in this table.
<pre><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.853%"> <tbody> <tr> <td style="width:1.0%"></td> <td style="width:71.960%"></td> <td style="width:0.1%"></td> <td style="width:0.1%"></td> <td style="width:0.532%"></td> <td style="width:0.1%"></td> <td style="width:1.0%"></td> <td style="width:11.637%"></td> <td style="width:0.1%"></td> <td style="width:0.1%"></td> <td style="width:0.532%"></td> <td style="width:0.1%"></td> <td style="width:1.0%"></td> <td style="width:11.639%"></td> <td style="width:0.1%"></td> </tr> <tr style="height:12pt"> <td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:1pt;font-weight:700;line-height:100%"> </span></td> <td colspan="3" style="padding:0 1pt"></td> <td colspan="3" rowspan="2" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">June 30,<br>2023</span></td> <td colspan="3" style="padding:0 1pt"></td> <td colspan="3" rowspan="2" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">December 31,<br>2022</span></td> </tr> <tr style="height:12pt"> <td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(In thousands, except share data)</span></td> <td colspan="3" style="padding:0 1pt"></td> <td colspan="3" style="padding:0 1pt"></td> </tr> <tr> <td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000000;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%">Assets</span></td> <td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td> <td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000000;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:1pt;font-weight:700;line-height:100%"> </span></td> <td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td> <td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000000;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:1pt;font-weight:400;line-height:100%"> </span></td> </tr> <tr> <td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Cash and due from banks</span></td> <td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td> <td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td> <td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"> <span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"> <ix:nonfraction unitref="usd" contextref="c-3" decimals="-3" name="us-gaap:CashAndDueFromBanks" format="ixt:num-dot-decimal" scale="3" id="f-32">120,285</ix:nonfraction> </span> </td> <td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td> <td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td> <td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td> <td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"> <span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"> <ix:nonfraction unitref="usd" contextref="c-4" decimals="-3" name="us-gaap:CashAndDueFromBanks" format="ixt:num-dot-decimal" scale="3" id="f-33">145,342</ix:nonfraction> </span> </td> <td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td> </tr> </tbody> </table>
Some time TD has direct data and some time TD has SPAN which has data. some time SPAN has custom tag which has data <ix:nonfraction
for a long time i am trying to loop through all TD's of all table and extract data only but getting no success.
here is my code which is trying to iterate and get data but code is not working.
<pre>var table1 = htmlDoc.DocumentNode.SelectNodes("//table");
var tbody = table1.ChildNodes["tbody"];
var lst = new List<Table1>();
foreach (var row in tbody.ChildNodes.Where(r => r.Name == "tr"))
{
var tbl1 = new Table1();
var columnsArray = row.ChildNodes.Where(c => c.Name == "td").ToArray();
for (int i = 0; i < columnsArray.Length; i++)
{
if (i == 0)
tbl1.Course = columnsArray[i].InnerText.Trim();
if (i == 1)
tbl1.Count = columnsArray[i].InnerText.Trim();
if (i == 2)
tbl1.Correct = columnsArray[i].InnerText.Trim();
}
lst.Add(tbl1);
}
Please some one guide me with a sample code which can extract data from html table TR,TD
please please need your support and help to extract data from html tables. thanks
|
|
|
|
|
Quote: but code is not working. Unfortunately that does not provide us with any useful information as to what happens when you run your code. Please edit your question, and add complete details of what is not working.
|
|
|
|
|
The name looked familiar, so I searched messages for it.
If it's the same person, and his question here fits the pattern in the days before, he's an old Assistive Nosferatu we terminated six years ago.
Just a heads up.
|
|
|
|
|
Thanks Dave. Let's see how this pans out.
|
|
|
|
|
What are you trying to say
pans out ??
|
|
|
|
|
I was replying to Dave Kreskowiak.
|
|
|
|
|
Why Dave said this ->
The name looked familiar, so I searched messages for it. what he is talking about?
|
|
|
|
|
It's a private conversation.
|
|
|
|
|
if private conversation then why you guys post text in my thread?
why do not create a new thread and gossip there?
|
|
|
|
|
Because you have a history here. One that got you booted before.
|
|
|
|
|
I wondered about that. I thought I'd seen the name. I was sure that Buffy had done her thing with Mr Pointy.
|
|
|
|
|
Tridip Bhattacharjee from Unknown wrote: code is not working.
Explain how it is not working.
Also explain what you did to determine exactly where it is failing.
|
|
|
|
|
Now it is working. i made some mistake in code. Thanks
|
|
|
|
|
getting too slow when connect c# desktop application with mysql cloud database
|
|
|
|
|
I am thinking you're going to need a lot more information than that.
"the debugger doesn't tell me anything because this code compiles just fine" - random QA comment
"Facebook is where you tell lies to your friends. Twitter is where you tell the truth to strangers." - chriselst
"I don't drink any more... then again, I don't drink any less." - Mike Mullikins uncle
|
|
|
|
|
You're going to have to provide a LOT more information than that. There's only about a thousand things that can be wrong.
We know nothing about your code, how you're retrieving data, any locking involved, normalization, queries you're using, the database, its structure, indexing, ...
Absolutely nothing.
|
|
|
|
|
You would need to figure out exactly which part is slow.
Presuming that it actually a database call then you would need to look at the SQL statements that are being executed.
And the environment. So if you are running 100,000 clients it is going to be far different than if you are running 1.
|
|
|
|
|
Hi everyone,
I am new to this community and C# in general, (a PHP guy) but I am hoping I can get some help here. I am trying to have a page display 20 products then, a next button for the other 20 and so on. Below is the code of what I am trying to achieve. (link to image image_new_button.png - Google Drive[^] )
Thanks for your help in advance.
Best regards
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="winners.aspx.cs" Inherits="FrontPanel.winners" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<div class="container">
<h4 class="paddingtb-15">Winner List </h4>
<table class="table table-striped table-bordered"><tr>
<th>Product Details</th>
<th>Amount</th>
<th>User Details</th>
</tr>
<asp:ListView ID="ListView1" runat="server">
<ItemTemplate>
<tr>
<td style="width:600px">
<asp:Image ID="Image1" runat="server" ImageUrl='<%#Eval("productimage") %>' Width="30px" />
<%#Eval("productname") %>
</td>
<td><%#Eval("winamount") %></td>
<td> <asp:Image ID="Image2" runat="server" ImageUrl='<%#Eval("userimage") %>' Width="30px" Height="30px" CssClass="img-circle" /><%#Eval("username") %> </td>
</tr>
</ItemTemplate>
</asp:ListView>
</table> </div>
</asp:Content>
|
|
|
|
|
I don't see you retrieving any. Usually, the question would be: How do I retrieve the "next" 20? Then, the "previous" 20. And so forth.
"Before entering on an understanding, I have meditated for a long time, and have foreseen what might happen. It is not genius which reveals to me suddenly, secretly, what I have to say or to do in a circumstance unexpected by other people; it is reflection, it is meditation." - Napoleon I
|
|
|
|
|
Hi Gerry,
Yes, it does retrieve info already as shown in the screenshot I linked, but it displays it all on a single page. This would cause a lengthy page and users would have to scroll to the bottom which can be never ending. I am looking for a solution to have it display only 20 items per page, with a next and previous button as previously mentioned.
Thanks much
|
|
|
|
|
You didn't show the code that queries the database and returns it. I'm going to assume it's a simple query that returns everything in a table.
You're basically going to have to completely re-write that code, and the code you posted, so it can track which page the user is on, and take parameters for what to return, like the number of items per page and which page to return.
There's plenty of examples on the web for "ASP.NET database paging". All you have to do is search for that.
|
|
|
|
|
The plumbers are here and working in my apratment room so to pass the time I'v fired up my web browser and coming across your question, I'm prompted to provide a few links which might be helpful. One is at StackExchange and in this particular post there's another link which is to C# Corner. Check them out:
https://stackoverflow.com/questions/4293805/how-to-show-20-rows-on-datagrid-each-time[^]
Example of DataGrid in ASP.NET[^]
And to top all this off, there's another link that comes full circle back to CP:
Using ROW_NUMBER() to paginate your data with SQL Server 2005 and ASP.NET[^]
What I seem to do when I use someone elses code is try anything that remotely resembles what I want to see happen ... but of course the example/sample's got to compile first!. That second C#Corner webpage even shows images of the expected output from the running.
Perhaps too old that CP SQLServer suggestion but I've always had good luck fronting data with the various flavors of SQL and there's always a ton of it on SO.
|
|
|
|
|
I have to transfer data from MFC Application to C# application every 1 second
Please find below the MFC Application (Server) and c# application (Client).
I have a issue. Both the application's memory keeps increasing in task manager every 1 or 2 seconds. Please help me to figure out the issue in my code.
Server Code in MFC applicationvoid SendDataToNamedPipe(CString sData)
{
char czVal[PIPEMAXSIZE]; //PIPEMAXSIZE = 10000
memset(czVal,0,PIPEMAXSIZE);
strcpy(czVal, sData /*buffer*/);
CString sPipeName = "\\\\.\\pipe\\" + "Pipe";
LPCTSTR lpszPipename = (const char*) sPipeName;
hNamedPipe = CreateNamedPipe(
lpszPipename, // Name of the pipe
PIPE_ACCESS_OUTBOUND, // Pipe access type
PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,
1, // Maximum number of instances
0, // Out buffer size
0, // In buffer size
0, // Timeout
NULL
);
if (hNamedPipe != INVALID_HANDLE_VALUE)
{
BOOL fConnected,fSuccess;
fConnected = ConnectNamedPipe(hNamedPipe, NULL) ? TRUE : (GetLastError() == ERROR_PIPE_CONNECTED);
//// Assuming 'dataToSend' contains the data to send
WriteFile(hNamedPipe, czVal, PIPEMAXSIZE /*(DWORD)sizeof(czVal)*/, NULL, NULL);
DisconnectNamedPipe(hNamedPipe);
CloseHandle(hNamedPipe);
}
}
Client Code C# Applicaition:
///////////////////
public void RecivePipeClient()
{
NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "Pipe", PipeDirection.In, PipeOptions.None);
pipeClient.Connect();
StreamReader reader = new StreamReader(pipeClient);
string dataValue = reader.ReadLine();
}
//Calling Thread function in MFC Application (Server)
void ThreadNamedPipeTagLiveValue(LPVOID)
{
CString strValue= "";
while( 1 )
{
POSITION pos1 = OLivePointList.GetHeadPosition();
while(pos1 != NULL)
{
CTagBase* OTemp = (CTagBase*) OLivePointList.GetAt(pos1);
CTime TNow;
TNow = CTime::GetCurrentTime();
strTime=TNow.Format("%m/%d/%Y %H:%M:%S");
CString strTemp;
strTag = OTemp->GetTagName();
if((OTemp->GetTagType() == CONTROLLER))
{
OTemp->GetTagValues(OLivePoints);
sTempValue.Format("%5.2f", OLivePoints.PV);
strValue = strValue + sTempValue + ",";
}
}
SendDataToNamedPipe(strValue);
Sleep(1000);
}
}
|
|
|
|
|
Is that the only thing that's wrong with it, the memory keeps increasing?
Does it work otherwise?
The difficult we do right away...
...the impossible takes slightly longer.
|
|
|
|
|
Just from a design point of view, are you sure you want to be creating and closing a new pipe every second? If you're going to be up and running for a bit, why deal with the overhead of constantly creating and destroying a pipe?
Also, in your C# code, you should use a using statement on your pipeClient variable. Its lack may be why you seem to be leaking memory due to incomplete cleanup of your pipe.
Be wary of strong drink. It can make you shoot at tax collectors - and miss.
Lazarus Long, "Time Enough For Love" by Robert A. Heinlein
|
|
|
|