hpricot: найти элементы типа A, у которых нет предков типа B или C - PullRequest
0 голосов
/ 15 марта 2012

Я использую hpricot для обработки внешнего HTML-кода.

Какой самый простой способ найти элементы одного типа (в моем случае: img), которые не имеют предка других типов (в моем случае: p или div)?

Я думаю, что выражение XPath //img[not ancestors::div and not ancestors::p] должно делать то, что я ищу. К сожалению, hpricot, очевидно, не поддерживает ось предка. И, насколько я знаю, в CSS нет оператора «нет такого предка», который я мог бы использовать.

1 Ответ

0 голосов
/ 16 марта 2012

Я решил свою проблему с помощью операций над множествами.Я собрал все узлы А и вычел те, у которых были предки В или С.Эти наборы легко выразить, и моя проблема настолько мала, что у меня не возникает проблем с производительностью или ресурсами.

(doc.search("img") - doc.search("p img") - doc.search("div img")).each do |node|
    # process node
end
...