我正在使用 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("option");
我这样做了,现在我得到了(选项文本移到选项标签之外):
<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;