Parsing-Tabellen, Zellen, die mit Html-Beweglichkeit in C#
Ich brauche zum analysieren von Html-code. Genauer gesagt, zu analysieren jede Zelle alle Zeilen in allen Tabellen. Jede Zeile, die ein einzelnes Objekt und jede Zelle repräsentieren unterschiedliche Eigenschaften. Ich möchte analysieren, um in der Lage sein, zu schreiben, die eine XML-Datei mit jeder data-innen (ohne die nutzlosen HTML-code). Ich habe erfolgreich in der Lage gewesen, zu analysieren jede Spalte aus der HTML-Datei, aber jetzt weiß ich nicht, was meine Optionen sind für das schreiben in eine XML-Datei. Ich bin ratlos.
HTML:
<tr><tr>
<td class="statBox" style="border-width:0px 1px 1px 0px; background-color: #FFFFFF">
1
</td>
<td class="statBox" style="border-width:0px 1px 1px 0px; background-color: #FFFFFF" align="left">
<a href="/ice/player.htm?id=8471675">Sidney Crosby</a>
</td>
<td class="statBox" style="border-width:0px 1px 1px 0px; background-color: #FFFFFF" align="center">
PIT
</td>
<td class="statBox" style="border-width:0px 1px 1px 0px; background-color: #FFFFFF" align="center">
C
</td>
<td class="statBox" style="border-width:0px 1px 1px 0px; background-color: #FFFFFF" align="right">
39
</td>
<td class="statBox" style="border-width:0px 1px 1px 0px; background-color: #FFFFFF" align="right">
32
</td>
<td class="statBox" style="border-width:0px 1px 1px 0px; background-color: #FFFFFF" align="right">
33
</td>
<td class="statBox sorted" style="border-width:0px 1px 1px 0px; background-color: #E0E0E0" align="right">
<font color="#000000">
65
</font>
</td>
<td class="statBox" style="border-width:0px 1px 1px 0px; background-color: #FFFFFF" align="right">
20
</td>
<td class="statBox" style="border-width:0px 1px 1px 0px; background-color: #FFFFFF" align="right">
29
</td>
<td class="statBox" style="border-width:0px 1px 1px 0px; background-color: #FFFFFF" align="right">
10
</td>
<td class="statBox" style="border-width:0px 1px 1px 0px; background-color: #FFFFFF" align="right">
1
</td>
<td class="statBox" style="border-width:0px 1px 1px 0px; background-color: #FFFFFF" align="right">
3
</td>
<td class="statBox" style="border-width:0px 0px 1px 0px; background-color: #FFFFFF" align="right">
</td>
<td class="statBox" style="border-width:0px 1px 1px 0px; background-color: #FFFFFF" align="right">
0
</td>
<td class="statBox" style="border-width:0px 1px 1px 0px; background-color: #FFFFFF" align="right">
154
</td>
<td class="statBox" style="border-width:0px 1px 1px 0px; background-color: #FFFFFF" align="right">
20.8
</td>
<td class="statBox" style="border-width:0px 1px 1px 0px; background-color: #FFFFFF" align="right">
21:54
</td>
<td class="statBox" style="border-width:0px 1px 1px 0px; background-color: #FFFFFF" align="right">
22.6
</td>
<td class="statBox" style="border-width:0px 0px 1px 0px; background-color: #FFFFFF" align="right">
55.7
</td>
</tr></tr>
C#:
using HtmlAgilityPack;
namespace Stats
{
class StatsParser
{
private string htmlCode;
private static string fileName = "[" + DateTime.Now.ToShortDateString() + " NHL Stats].xml";
public StatsParser(string htmlCode)
{
this.htmlCode = htmlCode;
this.ParseHtml();
}
public void ParseHtml()
{
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(htmlCode);
try
{
//Get all tables in the document
HtmlNodeCollection tables = doc.DocumentNode.SelectNodes("//table");
//Iterate all rows in the first table
HtmlNodeCollection rows = tables[0].SelectNodes(".//tr");
for (int i = 0; i < rows.Count; ++i)
{
//Iterate all columns in this row
HtmlNodeCollection cols = rows[i].SelectNodes(".//td[@class='statBox']");
for (int j = 0; j < cols.Count; ++j)
{
//Get the value of the column and print it
string value = cols[j].InnerText;
if (value!="")
System.Windows.MessageBox.Show(value);
}
}
}
catch (NullReferenceException)
{
System.Windows.Forms.MessageBox.Show("Exception!!");
}
}
XML:
<?xml version="1.0" encoding="utf-8" ?>
<Stats Date="2011-01-01">
<Player Rank="1">
<Name>Sidney Crosby</Name>
<Team>PIT</Team>
<Position>C</Position>
<GamesPlayed>39</GamesPlayed>
<Goals>32</Goals>
<Assists>33</Assists>
</Player>
</Stats>
- Können Sie ein Beispiel der XML-Ausgabe, die Sie gerne?
- FWIW, könnten Sie erheblich vereinfachen Ihre "parsing" - code, wenn Sie verwendet XPath effektiver. So etwas wie:
doc.DocumentNode.SelectNodes("//table[1]/tr/td[@class='statBox']")
würde Ihnen alle diestatBox
Zellen in der ersten Tabelle. - Ich habe einen Auszug von XML als ich haben möchte...
- Ich habe nicht wirklich analysiert die Felder in meinem code noch da wenn wäre kompliziert zu Durchlaufen und die Spalten zu kompilieren 17 verschiedenen Spalten unterschiedliche Daten, so Frage ich mich, wenn ich könnte nur Strom eine Ausgabe in eine XML-Datei statt und wenn es einen einfachen Weg, dies zu tun in C#
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach der Suche rund um MSDN, fand ich endlich eine Umsetzung der Lösung zu meinem problem:
welche gibt die folgende XML-Datei als Ausgabe:
Was hatte ich gemeint in meinem Kommentar war, dass du tust im code (nested loops), was mit den richtigen XPath für Sie tun können. Mit LINQ-to-XML machen kann dies sogar noch einfacher zu schreiben. Aber jetzt, wo wir sehen, wie Sie möchten, dass Ihre XML-Datei formatiert sind, bieten wir unsere eigenen Antworten. Ich würde schreiben das
ParseHtml()
Methode etwa so:Erzeugt die Ausgabe: