解析Html文檔獲取具有ID和值的所有輸入字段

c# csquery html-agility-pack

我有幾千個(ASP.net - 凌亂的HTML)html生成的發票,我正在嘗試解析並保存到數據庫中。

基本上像:

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

從我讀過的所有其他問題來看,這類問題的最佳工具是HtmlAgilityPack ,但是對於我的生活,我無法獲得文檔.chm文件。關於如何使用或不使用Agility Pack實現此目的的任何想法?

提前致謝

一般承認的答案

HtmlAgilityPack的新替代品是CsQuery 。關於它的相對性能優點,請參閱後面的問題,但它的CSS選擇器的使用不能被擊敗:

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

熱門答案

要使CHM工作,您可能需要在Windows資源管理器中查看屬性並取消選中“取消阻止內容”複選框

當您了解Linq-to-XML或XPath時,HTML Agility Pack非常簡單。

您需要了解的基礎知識:

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

添加HtmlAgility Pack的最簡單方法是使用NuGet

PM>安裝包HtmlAgilityPack



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow