2011-08-18 105 views
2

我特林解析HTML文件與此代碼:HtmlAgilityPack關閉表單標籤自動

<div><form>...</div>...</form> 

的問題是,HtmlAgilityPack股利前自動關閉窗體標籤結束標記: <div><form>...</form></div>...</form>所以當我解析某些表單元素的表單缺失。 (我只得到了以前生產自動添加標籤元素)

我已經嘗試過:

htmlDoc.OptionFixNestedTags = false; 
htmlDoc.OptionAutoCloseOnEnd = false; 
htmlDoc.OptionCheckSyntax = false; 
HtmlNode.ElementsFlags.Remove("form"); 
HtmlNode.ElementsFlags.Add("form", HtmlElementFlag.CanOverlap); 
HtmlNode.ElementsFlags.Add("div", HtmlElementFlag.CanOverlap); 

但沒有什麼幫助!

感謝您的幫助!

回答

0

這取決於你想要做什麼在文本被解析後以編程方式。如果你不想做什麼特別呢,下面的代碼:

HtmlDocument doc = new HtmlDocument(); 
    doc.LoadHtml("<div><form>form and div</div>form</form>"); 

    doc.Save(Console.Out); 

將顯示完全一樣的字符串,那就是:

<div><form>form and div</div>form</form> 

因爲圖書館是從地面開始設計儘可能地保留原始的Html。

但就DOM如何表示以及錯誤而言,這是另一回事。你不能同時存在1)重疊的元素2)類XML的DOM(不支持重疊)和3)沒有錯誤。

所以這取決於你想要解析後做什麼。

+0

我需要循環形式的子標籤。所以問題是我沒有得到所有的子標籤,只是自動添加標籤。 – ido

+0

@ido - 嗯......就像我說的,你可以'重疊標記和DOM(父/子關係)在同一時間。 –

+1

以及我正在解析一個網站,並且需要一個解決方案 – ido

1

下,似乎爲我工作:

HtmlAgilityPack.HtmlNode.ElementsFlags.Remove("form"); 

_document = new HtmlDocument(); 
_document.OptionAutoCloseOnEnd = true; 
_document.LoadHtml(content);