Parse Html Document Get Alle Eingabefelder mit ID und Wert

c# csquery html-agility-pack

Frage

Ich habe mehrere tausend (ASP.net - chaotisch HTML) HTML-generierte Rechnungen, die ich versuche zu parsen und in eine Datenbank zu speichern.

Grundsätzlich wie:

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

Aus all den anderen Fragen, die ich gelesen habe, ist das HtmlAgilityPack das beste Tool für diese Art von Problem, aber für das Leben von mir kann ich die Dokumentation .chm-Datei nicht zum Funktionieren bringen. Irgendwelche Ideen, wie ich das mit oder ohne Agility Pack erreichen könnte?

Danke im Voraus

Akzeptierte Antwort

Eine neuere Alternative zu HtmlAgilityPack ist CsQuery . Sehen Sie sich diese spätere Frage zu ihren relativen Leistungsmerkmalen an, aber die Verwendung von CSS-Selektoren ist nicht zu übertreffen:

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

Beliebte Antwort

Damit das CHM funktioniert, müssen Sie wahrscheinlich die Eigenschaften in Windows Explorer anzeigen und das Kontrollkästchen "Inhalt entsperren" deaktivieren .

Das HTML Agility Pack ist ziemlich einfach, wenn Sie sich in Linq-to-XML oder XPath auskennen.

Grundlagen, die Sie wissen müssen:

//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;
    }
}

Der einfachste Weg, das HtmlAgility Pack hinzuzufügen, ist die Verwendung von NuGet :

PM> Install-Paket HtmlAgilityPack




Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum