Как мне получить доступ к значениям атрибута foobar? В этом примере я хочу "1" и "2".
Переведено автоматически
Ответ 1
Я предлагаю ElementTree. Существуют и другие совместимые реализации того же API, такие как lxml, и cElementTree в самой стандартной библиотеке Python; но в данном контексте они в основном добавляют еще больше скорости - простота программирования зависит от API, который ElementTree определяет.
Сначала создайте экземпляр элемента root из XML, например, с помощью функции XML или путем синтаксического анализа файла с помощью чего-то вроде:
import xml.etree.ElementTree as ET root = ET.parse('thefile.xml').getroot()
Или любым из множества других способов, показанных на ElementTree . Затем сделайте что-то вроде:
for type_tag in root.findall('bar/type'): value = type_tag.get('foobar') print(value)
Существует множество вариантов. cElementTree отлично смотрится, если речь идет о скорости и использовании памяти. У него очень мало накладных расходов по сравнению с простым чтением в файле с помощью readlines.
Соответствующие показатели можно найти в таблице ниже, скопированной с веб-сайта cElementTree:
library time space xml.dom.minidom (Python 2.1) 6.3 s 80000K gnosis.objectify 2.0 s 22000k xml.dom.minidom (Python 2.4) 1.4 s 53000k ElementTree 1.21.6 s 14500k ElementTree 1.2.4/1.31.1 s 14500k cDomlette (C extension) 0.540 s 20500k PyRXPU (C extension) 0.175 s 10850k libxml2 (C extension) 0.098 s 16000k readlines (read as utf-8) 0.093 s 8850k cElementTree (C extension) --> 0.047 s 4900K <-- readlines (read as ascii) 0.032 s 5050k
Как указано @jfs, cElementTree поставляется в комплекте с Python:
Python 2: from xml.etree import cElementTree as ElementTree.
Python 3: from xml.etree import ElementTree (ускоренная версия C используется автоматически).