Как использовать xpath из lxml на узлах с нулевым пространством имен?

Как лучше всего справиться с отсутствием пространства имен на некоторых узлах в документе xml с помощью lxml? Должен ли я сначала изменить все именованные узлы None, чтобы добавить имя «gmd», а затем изменить атрибуты дерева на имя http://www.isotc211.org/2005/gmd как «gmd»? Если да, есть ли чистый способ сделать это с помощью lxml или чего-то еще, что было бы относительно чистым / безопасным?

from lxml import etree
nsmap = charts_tree.nsmap
nsmap.pop(None) # complains without this on the xpath with
# TypeError: empty namespace prefix is not supported in XPath
len (charts_tree.xpath('//*/gml:Polygon',namespaces=nsmap))
# 1180
len (charts_tree.xpath('//*/DS_DataSet',namespaces=nsmap))
# 0 ... Bummer!
len (charts_tree.xpath('//*/DS_DataSet'))
# 0 ... Also a bummer

например. http://www.charts.noaa.gov/ENCs/ENCProdCat_19115.xml



    
        
            
                
                    NOAA ENC Product Catalog
                
...

    
        
            
                
                    67.61505 -178.99979
                    73.99999 -178.99979
...
                    64.99997 -178.99979
                    67.61505 -178.99979
                

12
задан Kurt Schwehr 2 August 2011 в 23:45
поделиться