Ich würde gerne eine HTML-Tabelle analysieren und Inhalte mit XML zu LINQ in einer gebundenen Listbox disaply.
Ich verwende das HTML-Agility-Paket und verwende diesen Code.
HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load("http://www.SourceURL");
HtmlNode rateNode = doc.DocumentNode.SelectSingleNode("//div[@id='FlightInfo_FlightInfoUpdatePanel']");
string rate = rateNode.InnerText;
this.richTextBox1.Text = rate;
Der HTML sieht so aus ..
<div id="FlightInfo_FlightInfoUpdatePanel">
<table cellspacing="0" cellpadding="0"><tbody>
<tr class="">
<td class="airline"><img src="/images/airline logos/NZ.gif" title="AIR NEW ZEALAND LIMITED. " alt="AIR NEW ZEALAND LIMITED. " /></td>
<td class="flight">NZ8</td>
<td class="codeshare"> </td>
<td class="origin">San Francisco</td>
<td class="date">01 Sep</td>
<td class="time">17:15</td>
<td class="est">18:00</td>
<td class="status">DEPARTED</td>
</tr>
Aber es gibt das zurück
NZ8 San Francisco01 Sep17:1518:00DEPARTEDAC6103NZ8San Francisco01 Sep17:1518:00DEPARTEDCO6754NZ8San Francisco01 Sep17:1518:00DEPARTEDLH7157NZ8San Francisco01 Sep17:1518:00DEPARTEDUA6754NZ8San Francisco01 Sep17:1518:00DEPARTEDUS5308NZ8San Francisco01 Sep17:1518:00DEPARTEDVS7408NZ8San Francisco01 Sep17:1518:00DEPARTEDEK407 Melbourne/Dubai01 Sep17:5017:50DEPARTEDEK413 Sydney/Dubai01 Sep18:0018:00DEPARTEDQF44 Sydney01
Was ich möchte, ist dies in das XML-Format zu pas- sen und dann LINQ to XML zu verwenden, um das XML zu einer gebundenen Listbox-Itemsource zu analysieren.
Ich denke, dass ich eine Variation von unten für jede Klasse verwenden muss, aber möchte etwas Hilfe.
HtmlNodeCollection cols = rows[i].SelectNodes(".//td[@class='flight']");
Sie verwenden InnerText
das den HTML- InnerText
.
Benutze InnerHtml
:
string rate = rateNode.InnerHtml;
Sie können ein XML-Dokument aus dieser Zeichenfolge erstellen (vorausgesetzt, es handelt sich um gültiges XML).
Sie können den rateNode
auf die gleiche Weise abfragen, wie Sie ihn abgerufen haben - indem Sie die rateNode
Knoten auswählen:
var firstRow = rateNode.SelectSingleNode("./table/tbody/tr[0]");
string origin = firstRow.SelectSingleNode("./td[@class = 'origin']");
Wenn Sie mit linq to xml arbeiten möchten, können Sie das HtmlDocument in eine xml-Zeichenfolge konvertieren:
HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load("http://www.SourceURL");
doc.OptionOutputAsXml = true;
System.IO.StringWriter sw = new System.IO.StringWriter();
System.Xml.XmlTextWriter xw = new System.Xml.XmlTextWriter(sw);
doc.Save(xw);
string result = sw.ToString();
Dann müssen Sie nur ein XDocument-Objekt erstellen und mit der XML-Zeichenfolge laden:
System.Xml.Linq.XDocument xDoc = System.Xml.Linq.XDocument.Parse(result);
Und jetzt haben Sie ein XDocument, um mit Linq zu spielen.