【发布时间】:2013-07-30 13:16:17
【问题描述】:
我正在使用 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;
【问题讨论】:
-
在您的第一个示例 HTML 代码中,您的
-
对不起,没有意识到原来的例子在不同的地方是不同的。我使用我的 html 文件阅读了它。很抱歉造成混乱。
标签: c# .net dom html-agility-pack