Cómo unir dos HtmlNodeCollections

c# html-agility-pack xpath

Pregunta

Estoy usando HTML Agility Pack en C # y tengo dos HtmlNodeCollection . ¿Puedo unirme a ambos o hay otras formas de obtener ambos en una HtmlNodeCollection ?

Uno:

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

Dos:

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

Respuesta aceptada

HtmlNodeCollection hereda IList<HtmlNode> que hereda IEnumerable<HtmlNode> en el que puede llamar al método de extensión Enumerable.Concat() para crear un nuevo enumerable que contenga ambas fuentes. Consulte ¿Cómo concatenar dos IEnumerable <T> en un nuevo IEnumerable <T>? .

También puede seleccionar ambos conjuntos de nodos usando "o" en su expresión Xpath :

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

Tenga en cuenta que esto contains() espera clases dadas en el orden dado. Si no quieres eso, usa paréntesis y and :

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

Consulte ¿Cómo puedo seleccionar un elemento con varias clases con Xpath? para una implementación adecuada de eso and , como el código anterior coincidirá con falsos positivos porque no comprueba las clases como palabras separadas.




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué