当前位置:  开发笔记 > 前端 > 正文

HtmlAgilityPack删除选项结束标记

如何解决《HtmlAgilityPack删除选项结束标记》经验,为你挑选了2个好方法。

我正在使用HtmlAgilityPack.我用以下字符串创建一个HtmlDocument和LoadHtml:


这有些意想不到的事情.首先,它给出了两个解析器错误,EndTagNotRequired.其次,select节点有4个子节点 - 两个用于选项标签,另外两个用于选项标签的内部文本.最后,OuterHtml是这样的:


所以基本上我决定放弃选项上的结束标记.让我们暂时搁置一下,这样做是否合适和可取.我正在使用HtmlAgilityPack来测试HTML生成代码,所以我不希望它为我做出任何决定或者给出任何错误,除非HTML确实是错误的.有没有办法让它表现得我想要的?我尝试为HtmlDocument设置一些选项,具体来说:

 doc.OptionAutoCloseOnEnd = false;
 doc.OptionCheckSyntax = false;
 doc.OptionFixNestedTags = false;

这不起作用.如果HtmlAgilityPack不能做我想做的事,你能推荐一些可以吗?



1> bobince..:

在HAP主页的讨论中报告了完全相同的错误,但看起来几年内没有对该项目进行任何有意义的修复.不鼓励.

快速浏览源表明,通过注释HtmlNode.cs的第92行可以修复错误:

// they sometimes contain, and sometimes they don 't...
ElementsFlags.Add("option", HtmlElementFlag.Empty);

(实际上不是,它们总是包含标签文本,尽管空白字符串也是有效文本.粗心的作者可能会省略结束标记,但那时任何元素都是如此.)

一个等效的解决方案是HtmlNode.ElementsFlags.Remove("option");在任何使用liberary之前调用(不需要修改liberary源代码)


我在尝试获取选项的InnerText值时遇到了这个问题.我使用HtmlNode公开的静态HashTable直接在我的代码中应用了你的解决方案:HtmlNode.ElementsFlags.Remove("option");

2> Willy..:

似乎有一些理由不将Option标记解析为"通用"标记,因为XHTML符合性,但这可能是一个真正的痛苦.

我的建议是做一个完整的字符串替换并将所有"选项"标签更改为"my_option"标签,这样你:

    不必修改库的源代码(以后可以升级).

    可以像往常一样解析.

HtmlAgilityPack论坛上的原始帖子可以在以下网址找到:http://htmlagilitypack.codeplex.com/Thread/View.aspx?ThreadId=14982

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有