Parse Html Document Obtenga todos los campos de entrada con ID y valor

c# csquery html-agility-pack

Pregunta

Tengo varios miles de facturas generadas con html (ASP.net - html) que estoy intentando analizar y guardar en una base de datos.

Básicamente como

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

De todas las otras preguntas , he leído que la mejor herramienta para este tipo de problema es el HtmlAgilityPack , sin embargo, durante toda mi vida no puedo hacer que funcione la documentación .chm. ¿Alguna idea sobre cómo podría lograr esto con o sin el paquete Agility?

Gracias por adelantado

Respuesta aceptada

Una alternativa más nueva a HtmlAgilityPack es CsQuery . Vea esta última pregunta sobre sus méritos relativos de rendimiento, pero su uso de los selectores de CSS no puede ser superado:

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

Respuesta popular

Para que el CHM funcione, probablemente deba ver las propiedades en el Explorador de Windows y desmarcar la casilla de verificación "Desbloquear contenido" .

El paquete de agilidad HTML es bastante fácil cuando sabes cómo utilizar Linq-to-XML o XPath.

Fundamentos que necesitarás saber:

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

La forma más fácil de agregar el paquete HtmlAgility es usando NuGet :

PM> Install-Package HtmlAgilityPack



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué