一、Anglesharp簡介
Anglesharp是一個純C#的HTML解析器,提供一個友好的API,幫助用戶在.NET平台中解析和操作HTML文檔。與其他.NET平台的HTML解析器相比,Anglesharp的語法更加簡單易懂,使用也更加方便,支持從根本上修改DOM。
如果你需要獲取一個HTML文件中某個DOM元素的內容或者屬性,或者需要在伺服器端分析HTML文檔並做進一步處理,Anglesharp將是一個不錯的選擇。
二、在項目中引用Anglesharp
在使用Anglesharp之前,需要將其添加到項目中。你可以通過NuGet下載Anglesharp包,也可以通過官方GitHub下載源代碼並使用。這裡我們使用NuGet進行安裝。
Install-Package AngleSharp
三、從字元串解析HTML文檔
在解析HTML文檔之前,我們需要先創建一個Document對象,然後將HTML文件作為參數傳入,則會返回DOM樹的根節點HTMLHtmlElement。下面是一個解析HTML字元串並獲取頁面title的代碼示例。
using AngleSharp; // 解析HTML字元串,並獲取title var html = @"<!DOCTYPE html> <html> <head> <title>Hello World</title> </head> <body> <p>This is a sample paragraph.</p> </body> </html>"; var parser = new HtmlParser(); var doc = parser.ParseDocument(html); var title = doc.Title;
在以上示例中,我們首先定義了一個HTML字元串,然後使用HtmlParser解析該字元串,並獲取Document對象。最後通過doc.Title獲取頁面的title,其值為”Hello World”。
四、從文件解析HTML文檔
除了從字元串解析HTML文檔,我們還可以從文件中解析HTML文檔。使用File.ReadAllText從文本文件中讀取HTML代碼,然後用HtmlParser進行解析。
using AngleSharp; using System.IO; // 從文件中解析HTML文檔,並獲取頁面title var filePath = @"D:\html\test.html"; var html = File.ReadAllText(filePath); var parser = new HtmlParser(); var doc = parser.ParseDocument(html); var title = doc.Title;
在以上示例中,我們通過File.ReadAllText從D:\html\test.html路徑讀取HTML代碼,然後用HtmlParser進行解析,並獲取頁面title。
五、選擇器操作
選擇器是用於選擇DOM樹中特定元素的一種方法,可以幫助我們對HTML文檔進行更加靈活的操作。在Anglesharp中,內置了CSS選擇器,支持多種類型的選擇器。
1. 獲取所有p元素
using AngleSharp; using AngleSharp.Dom; using System.Linq; // 獲取HTML文檔中所有的p元素 var html = @"<!DOCTYPE html> <html> <head> <title>Hello World</title> </head> <body> <p>This is a sample paragraph 1.</p> <p>This is a sample paragraph 2.</p> <p>This is a sample paragraph 3.</p> </body> </html>"; var parser = new HtmlParser(); var doc = parser.ParseDocument(html); var pList = doc.QuerySelectorAll("p").ToArray();
在以上示例中,我們使用doc.QuerySelectorAll(“p”)獲取頁面中所有p元素,並通過ToArray()方法將其轉換為數組。
2. 獲取特定id元素
using AngleSharp; using AngleSharp.Dom; using System.Linq; // 獲取HTML文檔中id為"test"的元素 var html = @"<!DOCTYPE html> <html> <head> <title>Hello World</title> </head> <body> <p id=""test"">This is a sample paragraph.</p> </body> </html>"; var parser = new HtmlParser(); var doc = parser.ParseDocument(html); var element = doc.QuerySelector("#test");
在以上示例中,我們使用doc.QuerySelector(“#test”)查找頁面中id為”test”的元素,並將其返回給element對象。
六、DOM操作
1. 創建元素
在Anglesharp中,可以使用CreateElement方法創建DOM元素。
using AngleSharp; using AngleSharp.Dom; using AngleSharp.Html.Dom; // 創建一個新的p元素,並設置其內容和屬性 var parser = new HtmlParser(); var doc = parser.ParseDocument("<html></html>"); var p = doc.CreateElement("p"); p.TextContent = "This is a new paragraph."; p.ClassName = "my-class";
在以上示例中,我們使用doc.CreateElement<IHtmlParagraphElement>(“p”)創建了一個新的p元素,並定義了其內容和類別。
2. 修改元素
在Anglesharp中,我們可以很方便地修改DOM元素,例如修改HTML標籤的屬性。
using AngleSharp; using AngleSharp.Dom; using AngleSharp.Html.Dom; // 創建一個包含img元素的文檔,並修改其屬性 var parser = new HtmlParser(); var doc = parser.ParseDocument(@"<html> <head> <title>Hello World</title> </head> <body> <img src=""test.jpg"" alt=""test image"" /> </body> </html>"); var img = doc.QuerySelector("img"); img.SetAttribute("src", "new-test.jpg"); img.SetAttribute("alt", "new test image");
在以上示例中,我們使用SetAttribute方法修改img元素的封裝屬性(src和alt)。
3. 刪除元素
在Anglesharp中,我們也可以刪除DOM元素。例如下面的示例演示了如何刪除文檔中所有的p元素。
using AngleSharp; using AngleSharp.Dom; using AngleSharp.Html.Dom; using System.Linq; // 刪除所有p元素 var parser = new HtmlParser(); var doc = parser.ParseDocument(@"<html> <head> <title>Hello World</title> </head> <body> <p>This is a sample paragraph 1.</p> <p>This is a sample paragraph 2.</p> <p>This is a sample paragraph 3.</p> </body> </html>"); var pList = doc.QuerySelectorAll("p").ToArray(); foreach (var p in pList) { p.Remove(); }
在以上示例中,我們使用doc.QuerySelectorAll(“p”)獲取頁面中所有p元素,並通過循環遍歷每一個p元素,並使用Remove()方法刪除它們。
結語
本文介紹了如何使用Anglesharp解析和操作HTML文檔,包括從字元串和文件中解析HTML、選擇器操作以及DOM操作等。Anglesharp不僅提供了簡單易懂的語法和方便快捷的API,還能夠在.NET平台中提供高效且靈活的HTML解析支持。希望本文能夠對讀者理解和使用Anglesharp有所幫助。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/196467.html