def nokogiri_process(content, selectors, namespaces, klass, type)
namespaces = namespaces.inject({}) { |new, (prefix, uri)| new.merge(prefix.to_s => uri) }
doc = content =~ /<html[\s>]/ ? klass.parse(content) : klass.fragment(content)
selectors.map { |sel| "descendant-or-self::#{sel}" }.each do |selector|
doc.xpath(selector, namespaces).each do |node|
if node.name == 'comment'
content = node.content.dup
content = content.sub(%r{^(\s*\[.+?\]>\s*)(.+?)(\s*<!\[endif\])}m) do |m|
fragment = nokogiri_process($2, selectors, namespaces, klass, type)
$1 + fragment + $3
end
comment = Nokogiri::XML::Comment.new(doc, content)
node.replace(comment)
elsif self.path_is_relativizable?(node.content)
node.content = relative_path_to(node.content)
end
end
end
result = doc.send("to_#{type}")
result.sub!(/(!DOCTYPE.+?)(>)/, '<\1>')
result
end