Jel*_*Cat 6 python lxml xml-namespaces
我想对iterfind()具有命名空间但没有前缀的元素执行.我想打个电话
iterfind([tagname]) 要么 iterfind([tagname], [namespace dict])
我不关心每次都输入如下标签:
"{%s}tagname" % tree.nsmap[None]
细节
我正在使用Google API的xml响应.根节点定义了几个名称空间,包括没有前缀的名称空间:xmlns="http://www.w3.org/2005/Atom"
看起来当我尝试搜索我的etree时,一切都像我期望的那样具有前缀的元素.例如:
>>> for x in root.iterfind('dxp:segment'): print x
...
<Element {http://schemas.google.com/analytics/2009}segment at 0x1211b98>
<Element {http://schemas.google.com/analytics/2009}segment at 0x1211d78>
<Element {http://schemas.google.com/analytics/2009}segment at 0x1211a08>
>>>
Run Code Online (Sandbox Code Playgroud)
但是当我尝试搜索没有前缀的内容时,搜索不会自动添加名称空间root.nsmap[None].例如:
>>> for x in root.iterfind('entry'): print x
...
>>>
Run Code Online (Sandbox Code Playgroud)
即使我尝试将命名空间映射作为可选参数抛出iterfind,它也不会附加命名空间.
尝试这个:
for x in root.iterfind('{http://www.w3.org/2005/Atom}entry'):
print x
Run Code Online (Sandbox Code Playgroud)
有关更多信息:阅读文档:http ://lxml.de/tutorial.html#namespaces
如果您不想输入该内容,并且想提供名称空间映射,则始终必须使用前缀,例如:
nsmap = {'atom': 'http://www.w3.org/2005/Atom'}
for x in root.iterfind('atom:entry', namespaces=nsmap):
print x
Run Code Online (Sandbox Code Playgroud)
(如果你想使用 xpath,同样的事情发生)
文档中使用什么前缀(如果有)并不重要,重要的是指定元素的完全限定名称,或者使用大括号表示法将其完整地写出 URI,或者使用映射到 URI 的前缀。
| 归档时间: |
|
| 查看次数: |
3963 次 |
| 最近记录: |