使用lxml和path来解析xml,但如果它有xmlns声明,则获取空列表

时间:2012-02-10 18:47:47

标签: python xml xpath lxml

我有一个xml文件,我需要解析标签的值。元素的XPATH"//provider"。我如何使用lxml来解析此标记?这是xml的开头:

<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://...">
    <provider>testmovieprovider</provider>
    <language>ja-JP</language>
    <!-- more stuff -->
</package>

以下是我的尝试:

>>> f = open(file)
>>> xml = f.read()
>>> node = etree.fromstring(xml)
>>> provider=node.xpath('//provider')
>>> provider
[] # (This returns an empty set, instead of the provider name, 'testmovieprovider'.)

2 个答案:

答案 0 :(得分:3)

尝试使用xml namespace

的xpath

我添加了名称空间xmlns="http://codespeak.net/ns/test1"

并使用以下代码

>>> xml_node = etree.fromstring(st)
>>> xml_node.xpath('//t:provider/text()',namespaces={'t': 'http://codespeak.net/ns/test1'})
['testmovieprovider']
>>>

我的st字符串是

'<?xml version="1.0" encoding="UTF-8"?>
 <package xmlns="http://codespeak.net/ns/test1">
 <provider>testmovieprovider</provider>
 <language>ja-JP</language>
 <!-- more stuff -->
 </package>'

答案 1 :(得分:3)

尝试这样的XPath:

/*/*[local-name()='provider']