Python 使用lxml和path解析xml,但如果有xmlns声明,则获取空列表
我有一个xml文件,需要解析标记的值。元素的Python 使用lxml和path解析xml,但如果有xmlns声明,则获取空列表,python,xml,xpath,lxml,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> <
XPATH
是“//provider”
。如何使用lxml
解析此标记?这是xml的开始:
<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://...">
<provider>testmovieprovider</provider>
<language>ja-JP</language>
<!-- more stuff -->
</package>
使用
xml名称空间尝试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>'
'
测试电影提供商
日语
'
尝试以下XPath:
/*/*[local-name()='provider']
向我们展示示例xml文件或向我们展示xml
的内容查看此链接。然后尝试使用xpath和名称空间。谢谢,为什么您的工作正常,但使用普通的//提供程序无法捕获它?@David42-这是因为默认名称空间。这很棘手,因为没有前缀。如果您的xmlns类似于xmlns:foo=”http://...“
,您可以使用//foo:provider
。另外,我没有使用/
,因为它效率低下。如果您已经知道,使用更显式的路径会更有效。但是,您也可以使用:/*[local-name()='provider']
。
'<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://codespeak.net/ns/test1">
<provider>testmovieprovider</provider>
<language>ja-JP</language>
<!-- more stuff -->
</package>'