Если это просто вопрос порядка, и ни один из тегов, которые нужно выделить, не вложен, использование XPath вместо селекторов CSS в Nokogiri должно вернуть теги в том же порядке, в котором они находятся в документе:
doc.xpath("//a | //h3").each { |o| puts o }
Я не уверен, относится ли это поведение к каким-либо спецификациям для Нокогири, так что вы можете быть осторожны, но по моему опыту это правда.
Конечно, если теги, к которым вы стремитесь, когда-либо вкладываются, вам, возможно, потребуется определить, что означает «удалить все теги, кроме определенных» (например, что происходит с удаленными тегами и их содержимым, которые существуют внутри не удаленных тегов и их содержимое и т. д.).
Если ваше требование достаточно сложное, так что запросы XPath его не обрезают, вам может понадобиться "пройтись по DOM", используя что-то вроде doc.root.children
, и рекурсивно исследовать дочерние элементы каждого узла.