Comment rejoindre deux HtmlNodeCollections

c# html-agility-pack xpath

Question

Je suis usign HTML Agility Pack en C # et j'ai deux HtmlNodeCollection . Puis-je rejoindre les deux ou existe-t-il d'autres moyens d'obtenir les deux dans un HtmlNodeCollection ?

Un:

HtmlNodeCollection butiks = doc.DocumentNode.SelectNodes("//div[contains(@class,'butik-large-image')]");

Deux:

HtmlNodeCollection butiks = doc.DocumentNode.SelectNodes("//div[contains(@class,'butik small left')]");

Réponse acceptée

HtmlNodeCollection hérite de IList<HtmlNode> qui hérite de IEnumerable<HtmlNode> sur lequel vous pouvez appeler la méthode d'extension Enumerable.Concat() pour créer un nouvel énumérateur contenant les deux sources Voir Comment concaténer deux IEnumerable <T> dans un nouvel IEnumerable <T>? .

Vous pouvez également simplement sélectionner les deux ensembles de nœuds en utilisant un "ou" dans votre expression Xpath :

//div[contains(@class,'butik-large-image') or contains(@class,'butik small left')]

S'il vous plaît noter que ce contains() attend classes données dans l'ordre donné. Si vous ne le souhaitez pas, utilisez des parenthèses et and :

//div[contains(@class,'butik-large-image') 
or 
( 
    contains(@class,'left') and
    contains(@class,'small') and
    contains(@class,'butik')
)]

Voir Comment puis-je sélectionner un élément avec plusieurs classes avec Xpath? pour une bonne implémentation de cela and , comme ci-dessus, le code va correspondre aux faux positifs car il ne vérifie pas les classes en tant que mots séparés.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow