#python #xml #lxml #objectify
#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!’, так и к ‘USA’. Как это можно сделать? Меня не волнует эффективность, просто экономность. Я перепробовал все, что мог придумать, но безрезультатно.
Ответ №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
Этот метод доступа к пространствам имен задокументирован здесь.