我可以解析收音机,复选框等。 但在解析选择节点时:
<select name="customeDropDown1" style="height :27px;width :121px;margin-top :75px;margin-left :401px;color:#000000;background-color:#FFFFFF;font-family:Roboto;font-style:;font-size:16px;position:absolute;">
<option>Option1
</option>
<option>Option1
</option>
<option selected="selected">Option1
</option>
</select>
我可以使用
获取select标签 var dropdowns = doc.DocumentNode.SelectNodes("//select");
foreach (HtmlNode dropDown in dropdowns)
但无法获取选项标记中的值 我试过了
dropDown .InnerHtml
dropDown . InnerText
和
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//select//option"))
我发现使用Xpath可以解决,任何代码示例都会有所帮助。
我正在使用C#win form application。
答案 0 :(得分:3)
出于一些奇怪的原因,HtmlAgilityPack没有正确处理这些标签,所以这设法解决了我的问题。
// Iterating over nodes to build the dictionary
foreach (HtmlNode city in citiesNodes)
{
if (city.NextSibling != null)
{
string key = city.NextSibling.InnerText;
string value = city.Attributes["value"].Value;
citiesHash.AddCity (key,value);
}
}
我没有直接到达节点,而是通过使用前一个simbling中的NextSimbling
引用来设法获取每个节点的值。
答案 1 :(得分:0)
您也可以试试这个。对于其他需要尝试不同的人(答案对我不起作用),我最终只是引用了父节点中的子节点:
HtmlNode.ElementsFlags.Remove("option"); // need this before you do anything with HAP
var options = htmlDoc.DocumentNode.SelectNodes("//select[@id='myselect']/option")
for (var i = 0; i < options.Count; i++) {
var val = options[i].InnerHtml;
}
我试图做一个foreach,遍历节点,这给了我空值。这对我来说很好。