def itis_search(request):
    xml_doc = _get_itis('searchForAnyMatch', request.GET)
    
    match_elements = xml_doc.xpath("//ns:return/ax:anyMatchList", namespaces=itis_namespaces)
    
    results = []
    for e in match_elements:
        # TODO better way to transmute an etree element into a objectified 
        # element
        o = objectify.fromstring(etree.tostring(e))
        if not len(o): # no matches were returned
            break
        
        try:
            taxon = Taxon.objects.get(tsn=o.tsn)
        except:
            taxon = Taxon()
        
            taxon.tsn = o.tsn
            taxon.name = o.sciName
            taxon.itis_rank = itis_get_rank(o.tsn)
            taxon.rank = Taxon.ITIS_RANKS[taxon.itis_rank]

        # skip taxa above Order
        if taxon.rank > 2:
            continue
        
        common_names = []
        for name in o.commonNameList.commonNames:
            if len(name):
                if name.language == 'English':
                    common_names.append(unicode(name.commonName))
        taxon.common_names = ', '.join(common_names)
        
        results.append(taxon)
    
    # render an HTML fragment that can be inserted into the taxon_import page
    return HttpResponse(
        render_to_string('taxons/itis_search_results.html', {
            'results': results,
            'MEDIA_URL': settings.MEDIA_URL,
        }),
        mimetype="text/plain",
    )