0%

【Tools】修復Html缺少Close Tag問題 - HtmlAgilityPack

開放後台給非工程人員編輯Html,往往都要擔負一些Html Tag錯誤整導致破版的風險。這次就碰到上線前發現部分資料區塊缺少了Close Tag,導致只要讀到那些資料的頁面都破版,但上千筆資料請人一筆一筆去檢查又太不切實際。所以就研究了一下是否有套件可以處理這類的問題,結果就發現了一個強大的套件 : HtmlAgilityPack

該套件主要功能是拿來解析網頁,似乎更多人是拿來製作爬蟲工具,但他同時也很貼心的提供API來分析Html Tag是否正確

首先先從Nuget載入該套件

[![](https://2.bp.blogspot.com/-cMfu_9lAHPY/WguV9l_rY0I/AAAAAAAAIQM/3thXpbJDKr4ZQPGb5T7Ff-waUuo7p6tWgCLcBGAs/s640/%25E6%259C%25AA%25E5%2591%25BD%25E5%2590%258D.png)](https://2.bp.blogspot.com/-cMfu_9lAHPY/WguV9l_rY0I/AAAAAAAAIQM/3thXpbJDKr4ZQPGb5T7Ff-waUuo7p6tWgCLcBGAs/s1600/%25E6%259C%25AA%25E5%2591%25BD%25E5%2590%258D.png)
然後用以下程式來進行Html修復
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//商品的尺寸報表Html有錯誤
var ps = this.Products.Where(x = > x.SizeReport != null);
foreach (var p in ps)
{
HtmlDocument doc = new HtmlDocument();
//fix when nesting errors are detected
doc.OptionFixNestedTags = true;

//將Html Editor編輯的東西丟進去
doc.LoadHtml(p.SizeReport.ToString());

//將修復後的Html結果存到MemoryStream
MemoryStream stream = new MemoryStream();
doc.Save(stream);
try
{
using (StreamReader reader = new StreamReader(stream, Encoding.Default))
{
stream.Position = 0;
p.SizeReport = reader.ReadToEnd(); //儲存回DB
this.SubmitChanges();
}

}
catch (Exception ex)
{

}
}