【问题标题】:HtmlAgilityPack HtmlNode how to get <select> and <option> tagHtmlAgilityPack HtmlNode如何获取<select>和<option>标签
【发布时间】:2011-08-11 20:12:09
【问题描述】:

我正在使用 HtmlAgilityPack HtmlNode 并且我想获取

<select> and <option> and all other html tags.

目前 HtmlNode 只解析 html, table, div,... 标签。我怎样才能获得选项并选择标签。

我当前的代码:

if (htmlContent != null)
{
    doc.LoadHtml(htmlContent);

    if (doc.DocumentNode.SelectNodes("//*") == null)
    {
        List<TagValuePair> tempList = new List<TagValuePair>();
        tempList.Add(new TagValuePair("Error!", htmlContent, -1));
        return tempList;
    }

    foreach (HtmlNode tag in doc.DocumentNode.SelectNodes("//*"))
    {
        try
        {
            if (!string.IsNullOrEmpty(tag.InnerHtml))
            {
                if (!tagAppearance.Keys.Contains(tag.Name))
                {
                    tagAppearance.Add(tag.Name, 1);
                }
                else
                    tagAppearance[tag.Name] = tagAppearance[tag.Name] + 1;

                tagsValues.Add(
                    new TagValuePair(tag.Name, tag.InnerHtml.Trim(),
                    tagAppearance[tag.Name])
                );
            }
        }
        catch
        {
            return null;
        }
    }
}

我试试

doc.DocumentNode.SelectNodes("//option"); 

我得到选项标签,但没有其他标签。如何获取所有+选项并选择

编辑:

需要从此 html 的选项中获取所有数据:

<select onchange="javascript:submitGlobalDiscountSvetisce(this.value);submitGlobalDiscount(this.value);" name="datumper">
                  <option value="18.6.2011|7">18.jun. 7 noči od 515,00&nbsp;EUR</option>
<option value="25.6.2011|7">25.jun. 7 noči od 515,00&nbsp;EUR</option>
<option value="2.7.2011|7">2.jul. 7 noči od 515,00&nbsp;EUR</option>
<option value="9.7.2011|7">9.jul. 7 noči od 515,00&nbsp;EUR</option>
<option value="16.7.2011|7">16.jul. 7 noči od 515,00&nbsp;EUR</option>
<option value="23.7.2011|7">23.jul. 7 noči od 515,00&nbsp;EUR</option>
<option value="30.7.2011|7">30.jul. 7 noči od 529,00&nbsp;EUR</option>
<option value="6.8.2011|7">6.avg. 7 noči od 529,00&nbsp;EUR</option>
<option value="13.8.2011|7">13.avg. 7 noči od 529,00&nbsp;EUR</option>
<option value="20.8.2011|7">20.avg. 7 noči od 529,00&nbsp;EUR</option>
<option value="3.9.2011|7">3.sep. 7 noči od 487,00&nbsp;EUR</option>
<option value="10.9.2011|7">10.sep. 7 noči od 487,00&nbsp;EUR</option>
<option value="17.9.2011|7">17.sep. 7 noči od 487,00&nbsp;EUR</option>
<option value="24.9.2011|7">24.sep. 7 noči od 487,00&nbsp;EUR</option>
<option value="1.10.2011|7">1.okt. 7 noči od 529,00&nbsp;EUR</option>
<option value="8.10.2011|7">8.okt. 7 noči od 529,00&nbsp;EUR</option>
<option value="15.10.2011|7">15.okt. 7 noči od 529,00&nbsp;EUR</option>
<option value="22.10.2011|7">22.okt. 7 noči od 567,00&nbsp;EUR</option>
<option value="29.10.2011|7">29.okt. 7 noči od 567,00&nbsp;EUR</option>

                </select>

【问题讨论】:

    标签: c# html-agility-pack


    【解决方案1】:

    默认情况下,OPTION 标记会被特别处理(出于历史原因)。请在此处查看我在此线程上的答案:Parsing HTML Reading Option Tag Content with HtmlAgillityPack

    【讨论】:

    • 谢谢回答。所以我必须手动解析选项和所有其他标签并通过联合加入它。我说的对吗?
    • @senzacionale - 不,您需要使用 ElementFlags;从那里删除“选项”标签。见另一个帖子stackoverflow.com/questions/4755486/…
    • 如果我使用您的代码:foreach (HtmlNode node in docs.DocumentNode.SelectNodes("//select[@id='onoffaci']//option")) 我得到对象引用未设置为一个对象的实例。
    • 我尝试使用 docs.DocumentNode.SelectNodes("//option");现在我得到所有选项标签。但是没有其他html标签。我必须使用 union 将 html 标签和 option 标签连接在一起,还是可以在一个节点中完成所有这些操作?
    • @senzacionale - 不确定我是否真的理解。 XPATH 应该支持联合是(带 |)
    【解决方案2】:

    您可以使用 html.DocumentNode.SelectSingleNode("//select[@id='idElement']").OuterHtml 这一行带来选择和选项。

    快乐代码

    【讨论】:

      猜你喜欢
      • 2013-10-22
      • 2010-12-21
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 2013-12-25
      相关资源
      最近更新 更多