使用objectify获取具有不同名称空间前缀的项目

时间:2011-02-17 15:06:34

标签: python xml lxml objectify

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dd="http://example.com/ns/1.0" xml:lang="en-US">
<entry>
    <content type="html">Hello World!</content>
    <dd:country_code>USA</dd:country_code>
</entry>

我想使用lxml.objectify访问'Hello World!'和'美国'。怎么做到呢?我不关心效率,只关心简约。我已经尝试了所有我无法想到的东西。

1 个答案:

答案 0 :(得分:1)

使用此设置:

import lxml.objectify as objectify
import io

content='''\
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dd="http://example.com/ns/1.0" xml:lang="en-US">
<entry>
    <content type="html">Hello World!</content>
    <dd:country_code>USA</dd:country_code>
</entry>
</feed>'''

doc=objectify.parse(io.BytesIO(content))
tree=doc.getroot()

简短快捷的方式:

print(list(tree.entry.iterchildren()))
# ['Hello World!', 'USA']

或者更具体的方式:

print(tree.entry["content"])
# Hello World!

处理名称空间:

print(tree.entry["{http://example.com/ns/1.0}country_code"])
# USA

这种访问命名空间的方法是documented here