如何使用HtmlAgilityPack </option> </select>解析<select> <option>标记

时间:2012-09-20 03:25:40

标签: html

我可以解析收音机,复选框等。 但在解析选择节点时:

<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。

2 个答案:

答案 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,遍历节点,这给了我空值。这对我来说很好。