您遇到两个挑战:
>使用名称空间的XML
>两个共享相同名称空间前缀的名称空间
具有两个不同名称空间重用前缀的XML文档
您会看到“ aws:”前缀,但是它用于两个不同的名称空间:
xmlns:aws="http://alexa.amazonaws.com/doc/2005-10-05/"
xmlns:aws="http://awis.amazonaws.com/doc/2005-07-11"
在XML中使用相同的名称空间前缀是完全合法的.规则是,后一个有效.
xmlstr = """
ccf3f263-ab76-ab63-db99-244666044e85
google.com/
GoogleEnables users to search the world's information, including webpages, images, and videos. Offers unique features and search technology.
15-Sep-1997
3453627
google.com/
1
Success
"""
下一个挑战是如何搜索命名空间元素.
我更喜欢使用xpath,为此,您可以在xpath表达式中使用所需的任何名称空间,但是您必须告诉xpath调用这些前缀的含义.这是通过命名空间字典完成的:
from lxml import etree
doc = etree.fromstring(xmlstr.strip())
namespaces = {"aws": "http://awis.amazonaws.com/doc/2005-07-11"}
texts = doc.xpath("//aws:LinksInCount/text()", namespaces=namespaces)
print texts[0]