Wie man zwei HtmlNodeCollections verbindet

c# html-agility-pack xpath

Frage

Ich benutze HTML Agility Pack in C # und ich habe zwei HtmlNodeCollection . Kann ich beiden beitreten oder gibt es andere Möglichkeiten, beide in eine HtmlNodeCollection zu HtmlNodeCollection ?

Ein:

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

Zwei:

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

Akzeptierte Antwort

HtmlNodeCollection erbt IList<HtmlNode> , das IEnumerable<HtmlNode> erbt, auf dem Sie die Erweiterungsmethode Enumerable.Concat() aufrufen können, um ein neues Enumerable.Concat() zu erstellen, das beide Quellen enthält. Siehe Wie verkette ich zwei IEnumerable <T> zu einem neuen IEnumerable <T>? .

Sie können auch beide Knotengruppen auswählen, indem Sie in Ihrem Xpath-Ausdruck ein "oder" verwenden :

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

Bitte beachten Sie, dass dies contains() erwartet Klassen in der angegebenen Reihenfolge. Wenn Sie das nicht möchten, verwenden Sie Klammern und and :

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

Siehe Wie kann ich ein Element mit mehreren Klassen mit Xpath auswählen? für eine ordnungsgemäße Implementierung von diesem and , wie oben Code wird falsch positive entsprechen, weil es nicht für die Klassen als separate Wörter überprüft.




Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum