gpt4 book ai didi

HtmlAgilityPack 删除选项结束标记

转载 作者:技术小花猫 更新时间:2023-10-29 11:54:01 27 4
gpt4 key购买 nike

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

<select id="foo_Bar" name="foo.Bar"><option selected="selected" value="1">One</option><option value="2">Two</option></select>

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

<select id="foo_Bar" name="foo.Bar"><option selected="selected" value="1">One<option value="2">Two</select>

所以基本上我决定删除选项上的结束标记。让我们暂时搁置一下这样做是否合适和可取。我正在使用 HtmlAgilityPack 来测试 HTML 生成代码,所以我不希望它为我做出任何决定或给出任何错误,除非 HTML 确实格式错误。有什么方法可以让它按照我的意愿行事吗?我尝试为 HtmlDocument 设置一些选项,特别是:

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

这是行不通的。如果 HtmlAgilityPack 不能做我想做的,你能推荐一些可以的吗?

最佳答案

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

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

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

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

添加

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

关于HtmlAgilityPack 删除选项结束标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/293342/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com