Ich habe einen HTML zu parsen (siehe unten)
<div id="mailbox" class="div-w div-m-0">
<h2 class="h-line">InBox</h2>
<div id="mailbox-table">
<table id="maillist">
<tr>
<th>From</th>
<th>Subject</th>
<th>Date</th>
</tr>
<tr onclick="location='readmail.html?mid=welcome'" style="font-weight: bold;">
<td>no-reply@somemail.net</td>
<td>
<a href="readmail.html?mid=welcome">Hi, Welcome</a>
</td>
<td>
<span title="2016-02-16 13:23:50 UTC">just now</span>
</td>
</tr>
<tr onclick="location='readmail.html?mid=T0wM6P'" style="font-weight: bold;">
<td>someone@outlook.com</td>
<td>
<a href="readmail.html?mid=T0wM6P">sa</a>
</td>
<td>
<span title="2016-02-16 13:24:04">just now</span>
</td>
</tr>
</table>
</div>
</div>
Ich muss Links in <tr onclick=
Tags und E-Mail-Adressen in <td>
-Tags analysieren.
Bisher habe ich versucht, das erste Vorkommen von E-Mail / Link von meinem HTML zu bekommen.
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(responseFromServer);
Könnte mir jemand zeigen, wie es richtig gemacht wird? Grundsätzlich möchte ich alle E-Mail-Adressen und Links von HTML, die in den Tags sind.
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//tr[@onclick]"))
{
HtmlAttribute att = link.Attributes["onclick"];
Console.WriteLine(att.Value);
}
EDIT: Ich muss geparste Werte in einer Klasse (Liste) paarweise speichern. E-Mail (Link) und Absender E-Mail.
public class ClassMailBox
{
public string From { get; set; }
public string LinkToMail { get; set; }
}
Sie können den folgenden Code schreiben:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(responseFromServer);
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//tr[@onclick]"))
{
HtmlAttribute att = link.Attributes["onclick"];
ClassMailBox classMailbox = new ClassMailBox() { LinkToMail = att.Value };
classMailBoxes.Add(classMailbox);
}
int currentPosition = 0;
foreach (HtmlNode tableDef in doc.DocumentNode.SelectNodes("//tr[@onclick]/td[1]"))
{
classMailBoxes[currentPosition].From = tableDef.InnerText;
currentPosition++;
}
Um diesen Code einfach zu halten, nehme ich einige Dinge an:
Wenn diese Bedingungen nicht zutreffen, funktioniert dieser Code nicht und es könnten einige Ausnahmen ausgelöst werden (IndexOutOfRangeExceptions) oder Links mit falschen E-Mail-Adressen gefunden werden.