Parcourez tous les descendants d'un nœud et inspectez-les un à un

c# html-agility-pack linq xpath

Question

Je dois faire une liste des enregistrements dans une page Web spécifique. J'ai la source de la page dans un fichier texte. J'ai besoin de traverser ce noeud, élément par élément:

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

Pour chaque élément, je dois vérifier le type (div, span, etc.), les attributs "id" et "class" pour pouvoir créer ma liste d'enregistrements. Je ne veux pas une collection de tous les s ou s. Cela ne va pas aider parce que je ne sais pas quel type d'élément je vais faire face en les parcourant. Je dois tous les vérifier. Parce que toutes les données dont j'ai besoin sont des enfants de la collection de nœuds mentionnée ci-dessus. Aucune suggestion?

Réponse acceptée

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;

}

Réponse populaire

Je pense qu'il est plus facile de faire en sorte que HtmlAgilityPack convertisse le document HTML en XML, par exemple:

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

Ensuite, utilisez l’API XML classique .NET (par exemple, en utilisant XmlDocument ou XDocument) pour traiter le contenu.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi