Как присоединиться к двум HtmlNodeCollections

c# html-agility-pack xpath

Вопрос

Я использую HTML Agility Pack в C #, и у меня есть два HtmlNodeCollection . Могу ли я присоединиться к обоим или есть другие способы получить оба в одном HtmlNodeCollection ?

Один:

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

Два:

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

Принятый ответ

HtmlNodeCollection наследует IList<HtmlNode> который наследует IEnumerable<HtmlNode> на который вы можете вызвать метод расширения Enumerable.Concat() чтобы создать новый перечислимый, содержащий оба источника. См. Как объединить два IEnumerable <T> в новый IEnumerable <T>? ,

Вы также можете просто выбрать оба набора узлов, используя «или» в своем выражении Xpath :

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

Обратите внимание, что это contains() ожидает заданных классов в данном порядке. Если вы этого не хотите, используйте круглые скобки and :

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

См. Как выбрать элемент с несколькими классами с помощью Xpath? для правильной реализации этого and , поскольку вышеприведенный код будет соответствовать ложным срабатываниям, потому что он не проверяет классы как отдельные слова.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему