gpt4 book ai didi

c# - HTML Agility Pack - 选择带有选项标签的 HTML 选择标签时出现问题

转载 作者:太空狗 更新时间:2023-10-29 23:23:24 26 4
gpt4 key购买 nike

我正在使用 HTML Agility Pack 选择一个元素并从加载的 html 字符串中返回该元素及其包含的所有内容。在测试我的代码时,我针对来自 w3schools 的选择标记示例运行它:

<select name="cars">
<option value="volvo">Volvo XC90</option>
<option value="saab">Saab 95</option>
<option value="mercedes">Mercedes SLK</option>
<option value="audi">Audi TT</option>
</select>

当我尝试使用 HTML 敏捷包选择并返回它时,我得到(选项结束标记已删除):

<select name="cars">
<option value="volvo">Volvo XC90
<option value="saab">Saab 95
<option value="mercedes">Mercedes SLK
<option value="audi">Audi TT
</select>

所以我在这里进行了一些搜索,找到了添加该行的说明:HtmlNode.ElementsFlags.Remove("选项");

我这样做了,现在我得到了(选项文本被移到了选项标签之外):

<select name="cars">
<option value="volvo"></option>Volvo XC90
<option value="saab"></option>Saab 95
<option value="mercedes"></option>Mercedes SLK
<option value="audi"></option>Audi TT
</select>

我希望输出与原始 HTML 匹配。我需要做什么才能得到它?

我也在玩 OptionWriteEmptyNodes,因为当我测试输入标签时,它们的自关闭被删除,添加该选项似乎可以解决这个问题。我现在将其注释掉以确保它不会影响此问题。

这是我的 .NET C# 代码:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(content);
HtmlNode.ElementsFlags.Remove("option"); // otherwise, the closing tag is removed.

//doc.OptionWriteEmptyNodes = true;

var nodes = doc.DocumentNode.SelectNodes("//select");

if (nodes == null)
return "Not found";
else
return nodes[0].OuterHtml;

最佳答案

您需要为选项标签设置 ElementsFlag 字段以使其工作

HtmlNode.ElementsFlags["option"] = HtmlElementFlag.Closed;

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);

它应该返回您的原始 HTML 代码。

我相信 HtmlAgilityPack 这样做的原因是因为 <option> -tag 具有讽刺意味的是是 HTML 中的一个可选标签,它不需要结束标签。

摘自 HtmlNode 的文档类及其字段 ElementsFlags :

Gets a collection of flags that define specific behaviors for specific element nodes. The table contains a DictionaryEntry list with the lowercase tag name as the Key, and a combination of HtmlElementFlags as the Value.

进一步研究 HtmlElementFlag枚举揭示了这一点:

Empty - The node is empty. META or IMG are example of such nodes. Closed - The node will automatically be closed during parsing.

您可以查看类的源代码HtmlNode查看其他哪些标签被认为是“特定的”。

关于c# - HTML Agility Pack - 选择带有选项标签的 HTML 选择标签时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17948122/

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