2011-08-18 117 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);