Python 如何使用lxml查找AWS响应中的元素(名称空间问题?)
我正在尝试使用lxml读取来自awsrestapi的响应,但没有任何运气。我可以很容易地解析响应并打印它,但是Python 如何使用lxml查找AWS响应中的元素(名称空间问题?),python,lxml,Python,Lxml,我正在尝试使用lxml读取来自awsrestapi的响应,但没有任何运气。我可以很容易地解析响应并打印它,但是find或xpath函数都找不到任何东西。例如,以此文档片段为例: <DistributionConfig xmlns="http://cloudfront.amazonaws.com/doc/2013-11-11/"> <CallerReference>e6d6909d-f1ed-47f1-83d9-290acf10f324</CallerRefere
find
或xpath
函数都找不到任何东西。例如,以此文档片段为例:
<DistributionConfig xmlns="http://cloudfront.amazonaws.com/doc/2013-11-11/">
<CallerReference>e6d6909d-f1ed-47f1-83d9-290acf10f324</CallerReference>
<Aliases>
<Quantity>1</Quantity>
<Items>
节点
始终为无
。我尝试了各种xpath,比如//Quantity
,//Quantity
,还有xpath
函数,但都找不到任何东西
如何在此类型的文档上使用此库?似乎您还需要提供元素的名称空间:
>>> root.find('.//aws:Quantity', namespaces={'aws': 'http://cloudfront.amazonaws.com/doc/2013-11-11/'})
<Element {http://cloudfront.amazonaws.com/doc/2013-11-11/}Quantity at 0xb6c16aa4>
>>root.find('.//aws:Quantity',名称空间={'aws':'http://cloudfront.amazonaws.com/doc/2013-11-11/'})
查找
不在此下降。也许root.find('alias/Quantity')
可以吗?你也可以通配符alias
(使用root.find('*/Quantity')
;我认为它应该可以工作)。好的,这似乎可以工作。您知道是否需要为整个文档指定名称空间
映射吗?我不希望每次调用都必须键入该部分。嗯,root.filter
调用中namespaces
参数的值只是一个字典。您可以将该字典分配给变量并重用它(root.find(“…”,namespaces=nsdict)
)。
>>> root.find('.//aws:Quantity', namespaces={'aws': 'http://cloudfront.amazonaws.com/doc/2013-11-11/'})
<Element {http://cloudfront.amazonaws.com/doc/2013-11-11/}Quantity at 0xb6c16aa4>