Come unire due HtmlNodeCollections

c# html-agility-pack xpath

Domanda

Sono in uso HTML Agility Pack in C # e ho due HtmlNodeCollection . Posso unirmi a entrambi o ci sono altri modi per ottenere entrambi in un HtmlNodeCollection ?

Uno:

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

Due:

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

Risposta accettata

HtmlNodeCollection eredita IList<HtmlNode> che eredita IEnumerable<HtmlNode> su cui è possibile chiamare il metodo di estensione Enumerable.Concat() per creare una nuova enumerazione che contiene entrambe le origini. Vedi Come concatenare due IEnumerable <T> in un nuovo IEnumerable <T>? .

Puoi anche selezionare entrambi i gruppi di nodi usando un "o" nella tua espressione Xpath :

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

Si prega di notare che questo contains() aspetta classi date nell'ordine dato. Se non lo vuoi, usa parentesi e and :

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

Vedi Come posso selezionare un elemento con più classi con Xpath? per una corretta implementazione di questo and , come sopra, il codice corrisponderà ai falsi positivi perché non controlla le classi come parole separate.



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché