class Nokogiri::CSS::XPathVisitor

def visit_element_name(node)

def visit_element_name(node)
  if @doctype == DoctypeConfig::HTML5 && html5_element_name_needs_namespace_handling(node)
    # HTML5 has namespaces that should be ignored in CSS queries
    # https://github.com/sparklemotion/nokogiri/issues/2376
    if @builtins == BuiltinsConfig::ALWAYS || (@builtins == BuiltinsConfig::OPTIMAL && Nokogiri.uses_libxml?)
      if WILDCARD_NAMESPACES
        "*:#{node.value.first}"
      else
        "*[nokogiri-builtin:local-name-is('#{node.value.first}')]"
      end
    else
      "*[local-name()='#{node.value.first}']"
    end
  elsif node.value.length == 2 # has a namespace prefix
    if node.value.first.nil? # namespace prefix is empty
      node.value.last
    else
      node.value.join(":")
    end
  elsif node.value.first != "*" && @namespaces&.key?("xmlns")
    # apply the default namespace (if one is present) to a non-wildcard selector
    "xmlns:#{node.value.first}"
  else
    node.value.first
  end
end