Analyser le document HTML Obtenir tous les champs de saisie avec ID et valeur

c# csquery html-agility-pack

Question

J'ai plusieurs milliers (ASP.net - messy html) html générés des factures que j'essaye d'analyser et de sauvegarder dans une base de données.

Fondamentalement comme:

 foreach(var htmlDoc in HtmlFolder)
 {
   foreach(var inputBox in htmlDoc)
   { 
      //Make Collection of ID and Values Insert to DB
   }
 }  

Parmi toutes les autres questions que j'ai lues, le meilleur outil pour résoudre ce type de problème est le HtmlAgilityPack . Cependant, je ne parviens pas à faire fonctionner le fichier .chm de documentation. Des idées sur la façon dont je pourrais accomplir cela avec ou sans le pack Agility?

Merci d'avance

Réponse acceptée

CsQuery est une alternative plus récente à HtmlAgilityPack . Voir cette question ultérieure sur ses avantages relatifs en termes de performances, mais son utilisation de sélecteurs CSS est imbattable:

var doc = CQ.CreateDocumentFromFile(htmldoc); //load, parse the file
var fields = doc["input"]; //get input fields with CSS
var pairs = fields.Select(node => new Tuple<string, string>(node.Id, node.Value()))
       //get values

Réponse populaire

Pour que le CHM fonctionne, vous devez probablement afficher les propriétés dans l'explorateur Windows et décochez la case "Débloquer le contenu" .

Le pack d'agilité HTML est assez simple lorsque vous maîtrisez l'utilisation de Linq-to-XML ou XPath.

Les bases que vous devez savoir:

//import the HtmlAgilityPack
using HtmlAgilityPack;

HtmlDocument doc = new HtmlDocument();

// Load your data
// -----------------------------
// Load doc from file:
doc.Load(pathToFile);

// OR

// Load doc from string:
doc.LoadHtml(contentsOfFile);
// -----------------------------

// Find what you're after
// -----------------------------
// Finding things using Linq
var nodes = doc.DocumentNode.DescendantsAndSelf("input")
    .Where(node => !string.IsNullOrWhitespace(node.Id)
        && node.Attributes["value"] != null
        && !string.IsNullOrWhitespace(node.Attributes["value"].Value));

// OR

// Finding things using XPath
var nodes = doc.DocumentNode
    .SelectNodes("//input[not(@id='') and not(@value='')]");
// -----------------------------


// looping through the nodes:
// the XPath interfaces can return null when no nodes are found
if (nodes != null) 
{ 
    foreach (var node in nodes)
    {
        var id = node.Id;
        var value = node.Attributes["value"].Value;
    }
}

Le moyen le plus simple d' ajouter le pack HtmlAgility consiste à utiliser NuGet :

PM> Paquet d'installation HtmlAgilityPack




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi