Ne pas analyser le code HTML vous-même, il y a des bibliothèques d'analyse là-bas qui peut le faire pour vous. Couplé avec le HTML Agility Pack et LINQ, vous pouvez faire qu'une bouchée de cette.
var doc =newHtmlDocument();
doc.Load(url);var nodes = doc.DocumentNode.SelectNodes("//table/tr");var table =newDataTable("MyTable");var headers = nodes[0].Elements("th").Select(th => th.InnerText.Trim());foreach(var header in headers){
table.Columns.Add(header);}var rows = nodes.Skip(1).Select(tr => tr
.Elements("td").Select(td => td.InnerText.Trim()).ToArray());foreach(var row in rows){
table.Rows.Add(row);}
avec un peu de personnalisations, fonctionne comme un charme Serait-ce que prendre soin de colspans et une table de style (css)? Il semble que ça serait tout simplement de traduire les données et l'élément de balisage non, c'est juste un one-to-one mapping. Les tables de données n'a pas une telle chose de toute façon, autant que je sache. Je viens de télécharger HtmlAgilityPack 1.4.6 pour ce faire. Le site affirme qu'il n'existe pas de documents encore. J'ai essayé de suivre l'exemple ici, mais j'ai reçu un NullReferenceException: var headers = nodes[0].Elements("th").Select(th => th.InnerText.Trim()); Le les nœuds a été null. Comment puis-je utiliser cette commande? Où puis-je trouver de la documentation? Cela dépend de la majoration, vous êtes à l'analyse. La documentation est certes en manque, mais la plupart des méthodes ont régulièrement de la documentation XML qui devrait être suffisant, la dernière fois que j'ai vérifié. Mais je crois qu'il a été modélisé d'après XmlDocument et classes apparentées donc, si vous êtes familier avec l'analyse de XML à l'aide de la bibliothèque XML, vous devriez vous sentir à la maison. nodes est le résultat de l'appel HtmlNode.SelectNodes() lequel vous passez en un xpath sélecteur. Apparemment, pas de tables immédiate des lignes ont été trouvés dans votre exemple.
var nodes = doc.DocumentNode.SelectNodes("//table/tr");
ligne a une faute de frappe et qu'il doit être avec double barre oblique après la "table" et tout fonctionne comme un charme
var nodes = doc.DocumentNode.SelectNodes("//table//tr");
Ce n'est pas nécessairement correcte, au moins, il serait faux de le classer comme une faute de frappe... et selon la situation, probablement faux. La plupart des gens écrivent des tables où le tr les éléments sont les enfants directs de la table nœud. (<table><tr>...</tr></table>) Mais d'un changement comme cela peut être nécessaire si les lignes ont été en vertu d'un tbody élément. Il ne serait pas mal si c'était le cas, mais je dirais que c'est pas aussi commun. Mais cela va avoir des problèmes, surtout quand il y a des tables imbriquées impliqués. Mais... c'est purement de la situation... comme c'est le cas présent.
Ne pas analyser le code HTML vous-même, il y a des bibliothèques d'analyse là-bas qui peut le faire pour vous. Couplé avec le HTML Agility Pack et LINQ, vous pouvez faire qu'une bouchée de cette.
Serait-ce que prendre soin de colspans et une table de style (css)? Il semble que ça serait tout simplement de traduire les données et l'élément de balisage
non, c'est juste un one-to-one mapping. Les tables de données n'a pas une telle chose de toute façon, autant que je sache.
Je viens de télécharger HtmlAgilityPack 1.4.6 pour ce faire. Le site affirme qu'il n'existe pas de documents encore. J'ai essayé de suivre l'exemple ici, mais j'ai reçu un NullReferenceException:
var headers = nodes[0].Elements("th").Select(th => th.InnerText.Trim());
Le les nœuds a éténull
. Comment puis-je utiliser cette commande? Où puis-je trouver de la documentation?Cela dépend de la majoration, vous êtes à l'analyse. La documentation est certes en manque, mais la plupart des méthodes ont régulièrement de la documentation XML qui devrait être suffisant, la dernière fois que j'ai vérifié. Mais je crois qu'il a été modélisé d'après
XmlDocument
et classes apparentées donc, si vous êtes familier avec l'analyse de XML à l'aide de la bibliothèque XML, vous devriez vous sentir à la maison.nodes
est le résultat de l'appelHtmlNode.SelectNodes()
lequel vous passez en un xpath sélecteur. Apparemment, pas de tables immédiate des lignes ont été trouvés dans votre exemple.OriginalL'auteur Jeff Mercado
...quelques années plus tard...
ligne a une faute de frappe et qu'il doit être avec double barre oblique après la "table" et tout fonctionne comme un charme
tr
les éléments sont les enfants directs de latable
nœud. (<table><tr>...</tr></table>
) Mais d'un changement comme cela peut être nécessaire si les lignes ont été en vertu d'untbody
élément. Il ne serait pas mal si c'était le cas, mais je dirais que c'est pas aussi commun. Mais cela va avoir des problèmes, surtout quand il y a des tables imbriquées impliqués. Mais... c'est purement de la situation... comme c'est le cas présent.OriginalL'auteur darkman00