I have scraped a table from a website using C# for my own website and loaded it into a string. There are too many columns so I was wondering if there was an easy way to delete some, probably using HTML Agility Pack but in C# if necessary.
The table in the string looks like this:
<table>
<tr>
<th scope="col"> </th>
<th scope="col"> </th>
<th scope="col">P </th>
<th scope="col">W </th>
<th scope="col">L </th>
<th scope="col">T </th>
<th scope="col">NR </th>
<th scope="col">Bat </th>
<th scope="col">Bowl </th>
<th scope="col">Pen </th>
<th scope="col">Pts </th>
</tr>
<tr>
<td>1 </td>
<td>Rayleigh 2nd </td>
<td>12 </td>
<td>8 </td>
<td>1 </td>
<td>0 </td>
<td>3 </td>
<td>14 </td>
<td>52 </td>
<td>0 </td>
<td>209 </td>
</tr>
<tr>
<td>2 </td>
<td>Rainham 1st </td>
<td>12 </td>
<td>8 </td>
<td>1 </td>
<td>1 </td>
<td>2 </td>
<td>12 </td>
<td>56 </td>
<td>-15 </td>
<td>199 </td>
</tr>
<tr class="lineAbove">
<td>3 </td>
<td>Old Chelmsfordians 2nd </td>
<td>12 </td>
<td>5 </td>
<td>5 </td>
<td>0 </td>
<td>2 </td>
<td>10 </td>
<td>48 </td>
<td>0 </td>
<td>148 </td>
</tr>
<tr>
<td>4 </td>
<td>Little Baddow 2nd </td>
<td>12 </td>
<td>5 </td>
<td>4 </td>
<td>0 </td>
<td>3 </td>
<td>21 </td>
<td>43 </td>
<td>-15 </td>
<td>144 </td>
</tr>
<tr>
<td>5 </td>
<td>Rayne 1st </td>
<td>12 </td>
<td>5 </td>
<td>4 </td>
<td>0 </td>
<td>3 </td>
<td>6 </td>
<td>39 </td>
<td>0 </td>
<td>140 </td>
</tr>
<tr>
<td>6 </td>
<td>Terling 1st </td>
<td>12 </td>
<td>4 </td>
<td>5 </td>
<td>1 </td>
<td>2 </td>
<td>12 </td>
<td>35 </td>
<td>0 </td>
<td>129 </td>
</tr>
<tr>
<td>7 </td>
<td>Willow Herbs 1st </td>
<td>12 </td>
<td>4 </td>
<td>6 </td>
<td>0 </td>
<td>2 </td>
<td>9 </td>
<td>34 </td>
<td>0 </td>
<td>117 </td>
</tr>
<tr>
<td>8 </td>
<td>Ongar 1st </td>
<td>12 </td>
<td>3 </td>
<td>5 </td>
<td>0 </td>
<td>4 </td>
<td>3 </td>
<td>42 </td>
<td>-5 </td>
<td>108 </td>
</tr>
<tr class="lineAbove">
<td>9 </td>
<td>Sandon Sports 1st </td>
<td>12 </td>
<td>3 </td>
<td>6 </td>
<td>0 </td>
<td>3 </td>
<td>8 </td>
<td>27 </td>
<td>0 </td>
<td>98 </td>
</tr>
<tr>
<td>10 </td>
<td>Little Waltham 2nd </td>
<td>12 </td>
<td>1 </td>
<td>9 </td>
<td>0 </td>
<td>2 </td>
<td>14 </td>
<td>25 </td>
<td>0 </td>
<td>65 </td>
</tr>
</table>
And I want to delete columns 8-10 (Bat, Bowl and Pen). I'm not really sure where to start so any pointers would be helpful!
You would need to iterate over each tr and remove the 8th, 9th and 10th td nodes from each.
bool first = true;
foreach (HtmlNode row in doc.DocumentNode.SelectNodes("//tr"))
{
if (first)
{
row.RemoveChild(row.SelectSingleNode("th[10]"));
row.RemoveChild(row.SelectSingleNode("th[9]"));
row.RemoveChild(row.SelectSingleNode("th[8]"));
first = false;
}
else
{
row.RemoveChild(row.SelectSingleNode("td[10]"));
row.RemoveChild(row.SelectSingleNode("td[9]"));
row.RemoveChild(row.SelectSingleNode("td[8]"));
}
}
Related
I'm trying to delete the 3rd and 4th <td> and <th> from my table using HtmlAgilityPack.
Example table string:
<table>
<thead>
<tr>
<th>Item</th>
<th>Price</th>
<th>Change</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>
<h2>Top Menu Items</h2>
</td>
</tr>
<tr>
<td> Diced Angus Steak <span>(7oz)</span></td>
<td>$13.50</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td> Kimchi Cheese Beef Pepper Rice</td>
<td>$15.00</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td> Classic Beef Pepper Rice</td>
<td>$13.50</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td>
<h2>Steaks</h2>
</td>
</tr>
<tr>
<td> Angus Rib Eye Steak <span>(8oz)</span></td>
<td>$25.50</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td> Angus Sirloin Steak <span>(8oz)</span></td>
<td>$22.50</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td> Diced Angus Steak <span>(7oz)</span> <span>(Steaks)</span></td>
<td>$13.50</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td> Chicken Breast Steak <span>(8oz)</span></td>
<td>$14.00</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td> Premium Hamburger Steak <span>(10oz)</span></td>
<td>$16.00</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td>
<h2>Pepper Rice</h2>
</td>
</tr>
<tr>
<td> Sambar Pepper Rice</td>
<td>$13.50</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td> Kimchi Cheese Beef Pepper Rice <span>(Pepper Rice)</span></td>
<td>$15.00</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td> Chicken Pepper Rice</td>
<td>$13.50</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td> Salmon Pepper Rice</td>
<td>$15.00</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td> Classic Beef Pepper Rice <span>(Pepper Rice)</span></td>
<td>$13.50</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td>
<h2>Sides</h2>
</td>
</tr>
<tr>
<td> Rice</td>
<td>$3.00</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td> Miso Soup</td>
<td>$3.00</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td> Sauteed String Beans</td>
<td>$4.00</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td> Sauteed Corn</td>
<td>$4.00</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td> Kimchi</td>
<td>$5.00</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td> French Fries</td>
<td>$4.00</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td> Onion Rings</td>
<td>$5.00</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td> Deep Fried Dumpling</td>
<td>$8.00</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td> Sausages</td>
<td>$7.50</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td>
<h2>Salad</h2>
</td>
</tr>
<tr>
<td> Large Salad</td>
<td>$7.00</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td> Small Salad</td>
<td>$3.00</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td> Large Seaweed Salad</td>
<td>$9.00</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
<tr>
<td> Small Seaweed Salad</td>
<td>$5.00</td>
<td>
- -
</td>
<td>
<span>
</span>
<span>
</span>
</td>
</tr>
</tbody>
</table>
I send the following string to this method, to remove the 3rd and 4th <td> and <th>.
public static string deleteCols(string table)
{
var doc = new HtmlDocument();
doc.LoadHtml(table);
bool first = true;
foreach (HtmlNode row in doc.DocumentNode.SelectNodes("//tr"))
{
if (first)
{
try
{
var th3 = row.SelectSingleNode("th[3]");
row.RemoveChild(th3);
}
catch
{
}
try
{
var th4 = row.SelectSingleNode("th[4]");
row.RemoveChild(th4);
}
catch
{
}
first = false;
}
else
{
try
{
var td3 = row.SelectSingleNode("td[3]");
row.RemoveChild(td3);
}
catch
{
}
try
{
var td4 = row.SelectSingleNode("th[4]");
row.RemoveChild(td4);
}
catch
{
}
}
}
foreach (HtmlNode row2 in doc.DocumentNode.SelectNodes("//span"))
{
row2.Remove();
}
return doc.DocumentNode.InnerHtml;
}
Which gives me the following result:
<table>
<thead>
<tr>
<th>Item</th>
<th>Price</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>
<h2>Top Menu Items</h2>
</td>
</tr>
<tr>
<td> Diced Angus Steak </td>
<td>$13.50</td>
<td>
</td>
</tr>
<tr>
<td> Kimchi Cheese Beef Pepper Rice</td>
<td>$15.00</td>
<td>
</td>
</tr>
<tr>
<td> Classic Beef Pepper Rice</td>
<td>$13.50</td>
<td>
</td>
</tr>
<tr>
<td>
<h2>Steaks</h2>
</td>
</tr>
<tr>
<td> Angus Rib Eye Steak </td>
<td>$25.50</td>
<td>
</td>
</tr>
<tr>
<td> Angus Sirloin Steak </td>
<td>$22.50</td>
<td>
</td>
</tr>
<tr>
<td> Diced Angus Steak </td>
<td>$13.50</td>
<td>
</td>
</tr>
<tr>
<td> Chicken Breast Steak </td>
<td>$14.00</td>
<td>
</td>
</tr>
<tr>
<td> Premium Hamburger Steak </td>
<td>$16.00</td>
<td>
</td>
</tr>
<tr>
<td>
<h2>Pepper Rice</h2>
</td>
</tr>
<tr>
<td> Sambar Pepper Rice</td>
<td>$13.50</td>
<td>
</td>
</tr>
<tr>
<td> Kimchi Cheese Beef Pepper Rice </td>
<td>$15.00</td>
<td>
</td>
</tr>
<tr>
<td> Chicken Pepper Rice</td>
<td>$13.50</td>
<td>
</td>
</tr>
<tr>
<td> Salmon Pepper Rice</td>
<td>$15.00</td>
<td>
</td>
</tr>
<tr>
<td> Classic Beef Pepper Rice </td>
<td>$13.50</td>
<td>
</td>
</tr>
<tr>
<td>
<h2>Sides</h2>
</td>
</tr>
<tr>
<td> Rice</td>
<td>$3.00</td>
<td>
</td>
</tr>
<tr>
<td> Miso Soup</td>
<td>$3.00</td>
<td>
</td>
</tr>
<tr>
<td> Sauteed String Beans</td>
<td>$4.00</td>
<td>
</td>
</tr>
<tr>
<td> Sauteed Corn</td>
<td>$4.00</td>
<td>
</td>
</tr>
<tr>
<td> Kimchi</td>
<td>$5.00</td>
<td>
</td>
</tr>
<tr>
<td> French Fries</td>
<td>$4.00</td>
<td>
</td>
</tr>
<tr>
<td> Onion Rings</td>
<td>$5.00</td>
<td>
</td>
</tr>
<tr>
<td> Deep Fried Dumpling</td>
<td>$8.00</td>
<td>
</td>
</tr>
<tr>
<td> Sausages</td>
<td>$7.50</td>
<td>
</td>
</tr>
<tr>
<td>
<h2>Salad</h2>
</td>
</tr>
<tr>
<td> Large Salad</td>
<td>$7.00</td>
<td>
</td>
</tr>
<tr>
<td> Small Salad</td>
<td>$3.00</td>
<td>
</td>
</tr>
<tr>
<td> Large Seaweed Salad</td>
<td>$9.00</td>
<td>
</td>
</tr>
<tr>
<td> Small Seaweed Salad</td>
<td>$5.00</td>
<td>
</td>
</tr>
</tbody>
</table>
As you can see, some of the elements I wish to delete are still there. Does anybody know what I'm doing wrong here?!
When you remove the 3rd th/tds from the row's children, the 4th item becomes the 3rd, so you're trying to remove a non-existing element.
As a solution, you can either store the elements in variables at first, and then delete them; or you can start removing from the 4th index.
i try to put HTML in a cell, but the border seems double lines:
cell = new Cell();
var elementsList = HtmlConverter.ConvertToElements(sectioncontent);
foreach (IElement e in elementsList)
{
cell.Add((IBlockElement)e);
}
cell.SetBorder(Border.NO_BORDER);
table.SetTextAlignment(TextAlignment.JUSTIFIED).AddCell(cell);
with html like this (caught from CKEditor and i put in a database):
<table border="1" cellpadding="1" cellspacing="1" style="width:500px">
<tbody>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
</tbody>
</table>
<p> </p>
================================ end
String HTML = "<p>Overview line1</p>"
+ "<p>Overview line2</p><p>Overview line3</p>"
+ "<p>Overview line4</p><p>Overview line4</p>"
+ "<p>Overview line5 </p>";
String CSS = "p { font-family: Cardo; }";
cell = new Cell();
//cell.Add(new Paragraph(s));
ElementList elementsList = XMLWorkerHelper.ParseToElementList(HTML, CSS);
foreach (IElement e in elementsList)
{
cell.Add((IBlockElement)e);
}
cell.SetBorder(Border.NO_BORDER);
table.SetTextAlignment(TextAlignment.JUSTIFIED).AddCell(cell);
document.Add(table);
but it raise exception:
Unable to cast object of type 'iTextSharp.text.Paragraph' to type 'iText.Layout.Element.IElement'.
How to workaround?
regards and thanks
After taking a whole weekend on google and here, without success, I ask for help.
I have this html table:
<TABLE id=tabella width="100%" border=1>
<TBODY>
<TR>
<TD class=ListTitle width=55></TD>
<TD class=ListTitle width=55>Data</TD>
<TD class=ListTitle width=45>Paziente</TD>
<TD class=ListTitle width=150>Prestazioni</TD>
<TD class=ListTitle width=41>Stato</TD>
<TD class=ListTitle width=41>Sede</TD>
<TD class=ListTitle width=70>Unità</TD>
<TD class=ListTitle width=100>Specialista</TD>
<TD class=ListTitle width=41>Contatto (codice,data, n.impegnat.)</TD>
<TD class=ListTitle width=15>Stato pag.</TD>
<TD class=ListTitle width=20></TD>
<TD class=ListTitle width=20></TD>
<TD class=ListTitle width=20></TD>
</TR>
<!-- riga sotto: "title" sostituisce "name" (compatibilità browser) STP 08/05/13 -->
<TR id=riga_0 title=201503548353>
<TD class=ListElement>
<INPUT onclick=selectPatientName(this);abilitaCambiaStato() type=checkbox value="PALMA ROCCO" name=patientSelect>
</TD>
<TD class=ListElement style="FONT-SIZE: 12px">
<CENTER>Giovedi
<BR>03/12/2015
<BR>10:45</CENTER>
</TD>
<TD class=ListElement style="FONT-SIZE: 11px">
<B>xxxxx xxxx</B>
<BR>[xxxxxxxx, 25/05/1965, tel.0000000000]</TD>
<TD class=ListElement style="FONT-SIZE: 12px">RM COLONNA LOMBOSACRALE</TD>
<TD class=ListElement style="FONT-SIZE: 12px">
<CENTER>Eseguito</CENTER>
</TD>
<TD class=ListElement style="FONT-SIZE: 12px">11 - xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</TD>
<TD class=ListElement style="FONT-SIZE: 12px">xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx </TD>
<TD class=ListElement style="FONT-SIZE: 12px">EQUIPE</TD>
<TD class=ListElement style="FONT-SIZE: 12px">
<CENTER>PB14310408
<BR>09/11/2015
<BR>16015-44444444</CENTER>
</TD>
<TD class=ListElement style="FONT-SIZE: 12px">niente</TD>
<TD class=ListElement>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD>
<IMG onclick=void(0) title="Appuntamento prenotato" class=button style="CURSOR: pointer" alt="Appuntamento prenotato" src="Images/app_noconfBW.gif">
</TD>
</TR>
<TR>
<TD class=Button></TD>
</TR>
</TBODY>
</TABLE>
<BR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD>
<IMG onclick="doAppointmentChangeStatus('201503548353')" title="Cambia stato appuntamento" class=button style="CURSOR: pointer" alt="Cambia stato appuntamento" src="Images/app_status.gif">
</TD>
</TR>
<TR>
<TD class=Button></TD>
</TR>
</TBODY>
</TABLE>
<BR>
<IMG alt="" src="Images/empty.gif"> </TD>
<TD class=ListElement>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD>
<IMG onclick=void(0) title="Appuntamento non revocabile" class=button style="CURSOR: pointer" alt="Appuntamento non revocabile" src="Images/iconDeleteBW.gif">
</TD>
</TR>
<TR>
<TD class=Button></TD>
</TR>
</TBODY>
</TABLE>
<BR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD>
<IMG onclick=void(0) title="Appuntamento non spostabile" class=button style="CURSOR: pointer" alt="Appuntamento non spostabile" src="Images/iconRightArrow_BW.gif">
</TD>
</TR>
<TR>
<TD class=Button></TD>
</TR>
</TBODY>
</TABLE>
<BR>
<IMG alt="" src="Images/empty.gif"> </TD>
<TD class=ListElement>
<!-- ....LER, 07/06/12 -->
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD>
<IMG onclick="doAppointmentDetails('201503548353')" title="Dettagli appuntamento" class=button style="CURSOR: pointer" alt="Dettagli appuntamento" src="Images/iconDetails.gif">
</TD>
</TR>
<TR>
<TD class=Button></TD>
</TR>
</TBODY>
</TABLE>
<BR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD>
<IMG onclick="doModificaRichiesta('201503548353')" title="Modifica Richiesta" class=button style="CURSOR: pointer" alt="Modifica Richiesta" src="Images/ModificaRichiesta.gif">
</TD>
</TR>
<TR>
<TD class=Button></TD>
</TR>
</TBODY>
</TABLE>
<BR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD>
<IMG onclick="doPagaRichiesta('PB14310408')" title="Effettua pagamento" class=button style="CURSOR: pointer" alt="Effettua pagamento" src="Images/fCash2.gif">
</TD>
</TR>
<TR>
<TD class=Button></TD>
</TR>
</TBODY>
</TABLE>
</TD>
</TR>
<TD class=ListElement>
<INPUT onclick=selectPatientName(this);abilitaCambiaStato() type=checkbox value="PAIANO ADDOLORATA" name=patientSelect>
</TD>
<TD class=ListElement style="FONT-SIZE: 12px">
<CENTER>Giovedi
<BR>03/12/2015
<BR>11:00</CENTER>
</TD>
<TD class=ListElement style="FONT-SIZE: 11px">
<B>PAIANO ADDOLORATA</B>
<BR>[MAGLIE, 21/03/1956, tel.0836210592]</TD>
<TD class=ListElement style="FONT-SIZE: 12px">RM COLONNA LOMBOSACRALE</TD>
<TD class=ListElement style="FONT-SIZE: 12px">
<CENTER>Eseguito</CENTER>
</TD>
<TD class=ListElement style="FONT-SIZE: 12px">11 - Istituto Santa Chiara - Castrignano dei Greci</TD>
<TD class=ListElement style="FONT-SIZE: 12px">Istituto S. Chiara RMN - Castrignano de' Greci </TD>
<TD class=ListElement style="FONT-SIZE: 12px">EQUIPE</TD>
<TD class=ListElement style="FONT-SIZE: 12px">
<CENTER>PB14108241
<BR>28/09/2015
<BR>16015-0371711463</CENTER>
</TD>
<TD class=ListElement style="FONT-SIZE: 12px">niente</TD>
<TD class=ListElement>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD>
<IMG onclick=void(0) title="Appuntamento prenotato" class=button style="CURSOR: pointer" alt="Appuntamento prenotato" src="Images/app_noconfBW.gif">
</TD>
</TR>
<TR>
<TD class=Button></TD>
</TR>
</TBODY>
</TABLE>
<BR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD>
<IMG onclick="doAppointmentChangeStatus('201503040650')" title="Cambia stato appuntamento" class=button style="CURSOR: pointer" alt="Cambia stato appuntamento" src="Images/app_status.gif">
</TD>
</TR>
<TR>
<TD class=Button></TD>
</TR>
</TBODY>
</TABLE>
<BR>
<IMG alt="" src="Images/empty.gif"> </TD>
<TD class=ListElement>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD>
<IMG onclick=void(0) title="Appuntamento non revocabile" class=button style="CURSOR: pointer" alt="Appuntamento non revocabile" src="Images/iconDeleteBW.gif">
</TD>
</TR>
<TR>
<TD class=Button></TD>
</TR>
</TBODY>
</TABLE>
<BR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD>
<IMG onclick=void(0) title="Appuntamento non spostabile" class=button style="CURSOR: pointer" alt="Appuntamento non spostabile" src="Images/iconRightArrow_BW.gif">
</TD>
</TR>
<TR>
<TD class=Button></TD>
</TR>
</TBODY>
</TABLE>
<BR>
<IMG alt="" src="Images/empty.gif"> </TD>
<!-- LER, 07/06/12...faccio diventare la colonna di tipo List element per poter aggiungere altro pulsante -->
<TD class=ListElement>
<!-- ....LER, 07/06/12 -->
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD>
<IMG onclick="doAppointmentDetails('201503040650')" title="Dettagli appuntamento" class=button style="CURSOR: pointer" alt="Dettagli appuntamento" src="Images/iconDetails.gif">
</TD>
</TR>
<TR>
<TD class=Button></TD>
</TR>
</TBODY>
</TABLE>
<BR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD>
<IMG onclick="doModificaRichiesta('201503040650')" title="Modifica Richiesta" class=button style="CURSOR: pointer" alt="Modifica Richiesta" src="Images/ModificaRichiesta.gif">
</TD>
</TR>
<TR>
<TD class=Button></TD>
</TR>
</TBODY>
</TABLE>
<BR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD>
<IMG onclick="doPagaRichiesta('PB14108241')" title="Effettua pagamento" class=button style="CURSOR: pointer" alt="Effettua pagamento" src="Images/fCash2.gif">
</TD>
</TR>
<TR>
<TD class=Button></TD>
</TR>
</TBODY>
</TABLE>
</TD>
</TR>
<!-- riga sotto: "title" sostituisce "name" (compatibilità browser) STP 08/05/13 -->
<TR>
<TD class=Button></TD>
</TR>
</TBODY>
</TABLE>
</TD>
</TR>
</TBODY>
</TABLE>
And want extract the data nodes.
Most pepole use HtmlAgilityPack and i tried this:
HtmlAgilityPack.HtmlNodeCollection aNodi = doc.DocumentNode.SelectNodes("//table[#id=tabella]/tbody/tr");
Also have tested most parameters in SelectNodes, but return always NULL!
What am i doing wrong?
Thank you all for the help!
If you want to select it by id in SelectNodes you have to wrap tabella in apostrophes:
var aNodi = doc.DocumentNode.SelectNodes("//table[#id='tabella']//tbody//tr");
You could also use GetElementbyId:
var aNodi = doc.GetElementbyId("tabella").SelectNodes("//tbody//tr");
Net c# website i have an html report is there.Now i want to take a printout of the same.So i used Javascript and its showing only the popup box ,not the content.how to solve this issue.
Javascript
<script type="text/javascript">
function PrintDiv() {
var divToPrint = document.getElementById('widget-content');
var popupWin = window.open('', '_blank', 'width=300,height=400,location=no,left=200px');
popupWin.document.open();
popupWin.document.write('<html><body onload="window.print()">' + divToPrint.innerHTML + '</html>');
popupWin.document.close();
}
</script>
button Click
<input type="button" onclick="PrintDiv()" value="Print" />
HTML Content
<div class="widget-content">
<div class="invoice-content">
<div class="invoice-head">
<div class="invoice-meta">
<%--Invoice <span class="invoice-number">#96558 </span><span class="invoice-date">Date:
2012-07-15</span>--%>
</div>
<h5 style="margin-left: 40%; height: 20px; font-size: large">
Order Form</h5>
<div class="invoice-to">
<ul>
<li><span>Booking Date:<asp:Label ID="dispbookingDate" runat="server"></asp:Label></span>
<span>Name<asp:Label TextMode="MultiLine" runat="server" ID="dispName"></asp:Label></span>
<span>Address:<asp:Label TextMode="MultiLine" runat="server" ID="dispAddress"></asp:Label></span>
</li>
</ul>
</div>
<div class="invoice-from">
<ul>
<li><span>Order No.<asp:Label ID="dispOrderNo" runat="server"></asp:Label></span> <span>
Wedding Date:<asp:Label runat="server" ID="dispWeddingDate"></asp:Label></span>
<span>Malayalam Date:<asp:Label runat="server" ID="dispWeddingMalayam"></asp:Label></span>
</li>
</ul>
</div>
</div>
<div>
<table class="table table-bordered table-striped table-hover">
<thead>
<tr>
<th class="style1">
Description
</th>
<th class="style2">
Rs.
</th>
<th>
Ps.
</th>
</tr>
</thead>
<tfoot>
<tr>
<th class="total-label" colspan="2">
Total:
</th>
<th class="total-amount">
<asp:Label ID="dispTotal" runat="server"></asp:Label>
</th>
</tr>
<tr>
<th class="total-label" colspan="2">
Adavance:
</th>
<th class="total-amount">
<asp:Label ID="dispAvance" runat="server"></asp:Label>
</th>
</tr>
<tr>
<th class="total-label" colspan="2">
Balance:
</th>
<th class="total-amount">
<asp:Label ID="dispBalance" runat="server"></asp:Label>
</th>
</tr>
</tfoot>
<tbody>
<tr>
<td class="style1">
Auditorium Rent
</td>
<td class="style2">
<asp:Label ID="dispRent" runat="server"></asp:Label>
</td>
<td>
<asp:Label ID="Label2" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td class="style1">
Dining Hall Rent
</td>
<td class="style2">
</td>
<td>
</td>
</tr>
<tr>
<td class="style1">
Kathir Mandapam
</td>
<td class="style2">
</td>
<td>
</td>
</tr>
<tr>
<td class="style1">
Tables and chairs
</td>
<td class="style2">
</td>
<td>
</td>
</tr>
<tr>
<td class="style1">
Electricity charge for water
</td>
<td class="style2">
</td>
<td>
</td>
</tr>
<tr>
<td class="style1">
Luxuary Tax
</td>
<td class="style2">
<asp:Label ID="dispLTax" runat="server"></asp:Label>
</td>
<td>
</td>
</tr>
<tr>
<td class="style1">
Central Service Tax
</td>
<td class="style2">
<asp:Label ID="dispCTax" runat="server"></asp:Label>
</td>
<td>
</td>
</tr>
</tbody>
</table>
</div>
<%-- <p class="amount-word">
Amount in Word: <span>
<asp:Label ID="dispAmountWord" runat="server"></asp:Label></span>
</p>--%>
</div>
<input type="button" onclick="PrintDiv()" value="Print" />
</div>
In your javascript you are searching for the div with id widget-content
your code: var divToPrint = document.getElementById('widget-content');
but in your html you have <div class="widget-content"> and it has no id, it only has a class.
So you have 2 options.
OPTION 1
Change class to id
OPTION 2
Change your javascript to search for the class like so
var divToPrint = document.getElementsByClassName('widget-content')
NOTE: this will return an array of elements with that class, whether theres only one or more.
So in order to select the one you want; assuming there is only 1 div with this class you do like so:
var divToPrint = document.getElementsByClassName('widget-content')[0]
I'm trying to manipulate a html table open in webbrowser control, this tool will be used ti access a sharepoint page with an autologin option. This far this is what i have:
HtmlElementCollection htmlcol =
wb.Document.GetElementsByTagName("formTextfield277");
for (int i = 0; i < htmlcol.Count; i++)
{
if (htmlcol[i].Name == "portal_id")
{
htmlcol[i].SetAttribute("VALUE",
Properties.Settings.Default.sharepoint_user);
}
else if (htmlcol[i].Name == "password")
{
htmlcol[i].SetAttribute("VALUE",
Properties.Settings.Default.sharepoint_pw);
}
}
This C# code if for manipulate this HTML page:
<TABLE CELLSPACING="0" CELLPADDING="0" WIDTH="100%" BORDER="0">
<TR>
<TD CLASS="txtRedBold10" WIDTH="4"> </TD>
<TD CLASS="txtRedBold10" COLSPAN="2" HEIGHT="30">Please log in</TD>
</TR>
<TR>
<TD CLASS="txtBlackReg10" WIDTH="4"> </TD>
<TD CLASS="txtBlackReg10">Username:</TD>
<TD><INPUT CLASS="formTextfield277" TYPE="text" NAME="portal_id" VALUE="" VCARD_NAME="vCard.Email" SIZE="28"></TD>
</TR>
<TR>
<TD CLASS="txtBlackReg10" COLSPAN="3"> </TD>
</TR>
<TR>
<TD CLASS="txtBlackReg10" COLSPAN="2"> </TD>
<TD CLASS="txtBlackReg10">Please enter your username or E-Mail Address</TD>
</TR>
<TR>
<TD CLASS="txtBlackReg10" COLSPAN="3"> </TD>
</TR>
<TR>
<TD CLASS="txtBlackReg10" WIDTH="4"> </TD>
<TD CLASS="txtBlackReg10">Password:</TD>
<TD><INPUT CLASS="formTextfield277" TYPE="password" NAME="password" SIZE="28" AUTOCOMPLETE="off"></TD>
</TR>
<TR>
<TD CLASS="txtBlackReg10" COLSPAN="3"> </TD>
</TR>
<TR>
<TD CLASS="txtBlackReg10" COLSPAN="2"> </TD>
<TD CLASS="txtBlackReg10">Please enter your network or Intranet password</TD>
</TR>
<TR>
<TD CLASS="txtBlackReg10" COLSPAN="3"> </TD>
</TR>
<TR>
<TD CLASS="txtBlackReg10" COLSPAN="2"> </TD>
<TD CLASS="txtBlackReg10">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0">
<TR>
<TD><INPUT TYPE="image" HEIGHT="24" WIDTH="20" SRC="images/cp_arrow.gif" VALUE="Log In"
BORDER="0"></TD>
<TD><A CLASS="linkTxtRedBold10" HREF="javascript:signin()"
onClick="saveForm()">Login</A>
</TD>
</TR>
</TABLE>
</TD>
</TR>
<TR>
<TD CLASS="txtBlackReg10" COLSPAN="3"> </TD>
</TR>
</TABLE>
Any sugestions?
Thanks in advance!
wb.Document.GetElementsByTagName("input") not wb.Document.GetElementsByTagName("formTextfield277");
HtmlElementCollection inputHtmlCollection = Document.GetElementsByTagName("input");
foreach (HtmlElement anInputElement in inputHtmlCollection)
{
if (anInputElement.Name.Equals("portal_id"))
{
anInputElement.SetAttribute("VALUE", Properties.Settings.Default.sharepoint_user);
}
if (anInputElement.Name.Equals("password"))
{
anInputElement.SetAttribute("VALUE", roperties.Settings.Default.sharepoint_pw);
}
}
hope this help!