Прокрутите все потомки узла и проверьте их один за другим

c# html-agility-pack linq xpath

Вопрос

Мне нужно составить список записей на определенной веб-странице. Я получил источник страницы в текстовом файле. Мне нужно пройти этот узел по элементам:

HtmlNodeCollection resultContainer = doc.DocumentNode.SelectNodes("//div[@class='result-list divider-y-5']");

Для каждого элемента мне нужно проверить тип (div, span и т. Д.), Это «id», а атрибуты «class» могут составить мой список записей. Мне не нужна коллекция всех s или s. Это не поможет, потому что я не знаю, к какому типу элемента я буду сталкиваться при прохождении через них. Я должен проверить их всех. Потому что все данные, которые мне нужны, - это дочерние узлы, упомянутые выше. Какие-либо предложения?

Принятый ответ

foreach(HtmlNode node in resultContainer)
{
    //check node type
    switch(node.Name)
    {
        case "div":
        {
            break;
        }   
        case "p":
        {
        }
        ///....etc
    }

    //get id
    String id = node.Attributes["id"].Value;

    //get class
    String class = node.Attributes["class"].Value;

}

Популярные ответы

Я думаю, что было бы проще, чтобы HtmlAgilityPack конвертировал html-документ в xml, например:

doc.Load(htmlStream, true);
doc.OptionOutputAsXml = true;
doc.OptionFixNestedTags = true;
doc.OptionAutoCloseOnEnd = true;
doc.Save(/* your Xml stream or filename */);

А затем используйте обычный .NET xml api (например, используя XmlDocument или XDocument) для обработки содержимого.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему