这是我到目前为止:
HtmlAgilityPack.HtmlDocument ht = new HtmlAgilityPack.HtmlDocument();
TextReader reader = File.OpenText(@"C:\Users\TheGateKeeper\Desktop\New folder\html.txt");
ht.Load(reader);
reader.Close();
HtmlNode select= ht.GetElementbyId("cats[]");
List<HtmlNode> options = new List<HtmlNode>();
foreach (HtmlNode option in select.ChildNodes)
{
if (option.Name == "option")
{
options.Add(option);
}
}
现在我有一个select元素的所有“选项”列表 . 获取密钥和文本需要访问哪些属性?
因此,例如,如果一个选项的html将是:
<option class="level-1" value="1">Funky Town</option>
我想得到输出:
1 - Funky Town
谢谢
编辑:我刚注意到了一些事情 . 当我获得“Select”元素的子元素时,它返回“option”类型的元素和“#text”类型的元素 .
嗯.. #text有我想要的字符串,但是select有值 .
我认为HTMLAgilityPack是一个HTML解析器?为什么它给我这样令人困惑的 Value ?
2 回答
这是由于html解析器的默认配置;它已将
<option>
配置为HtmlElementFlag.Empty(注释'they sometimes contain, and sometimes they don' t ...') .<form>
标记具有相同的设置(CanOverlap Empty),这使它们在dom中显示为空节点,没有任何子节点 .您需要在解析文档之前删除该标志 .
请注意,ElementsFlags属性是静态的,任何更改都将影响所有进一步的解析 .
编辑:你应该直接通过xpath选择
option
节点 . 我认为这应该适用于此:这将获得没有文本节点的选项 . 选项应包含您想要的字符串 . 等待你的HTML示例 .
}
您可以在属性上添加一些健全性检查以确保它存在 .