Разбор XML в Python
Я хотел бы проанализировать простой, маленький XML файл с использованием python, однако работа над pyXML, похоже, прекратилась. Я бы хотел использовать python 2.6, если это возможно. Может ли кто-нибудь порекомендовать парсер XML, который будет работать с 2.6?
Спасибо
Ответы
Ответ 1
Если он маленький и простой, просто используйте стандартную библиотеку:
from xml.dom.minidom import parse
doc = parse("filename.xml")
Это вернет дерево DOM, реализующее стандартный API-интерфейс объектной модели.
Если позже вам понадобится выполнить сложные действия, такие как проверка схемы или запрос XPath, я рекомендую сторонний lxml module, который является оберткой вокруг популярной библиотеки libxml2 C.
Ответ 2
Для большинства моих задач я использовал Minomom Lightweight DOM, начиная с официальной страницы:
from xml.dom.minidom import parse, parseString
dom1 = parse('c:\\temp\\mydata.xml') # parse an XML file by name
datasource = open('c:\\temp\\mydata.xml')
dom2 = parse(datasource) # parse an open file
dom3 = parseString('<myxml>Some data<empty/> some more data</myxml>')
Ответ 3
Здесь также очень хороший пример того, как использовать мини-диск вместе с пояснениями.
Ответ 4
Будет ли lxml соответствовать вашим потребностям? Его первый инструмент, к которому я обращаюсь для разбора xml.
Ответ 5
Несколько лет назад я написал библиотеку для работы со структурированным XML. Это упрощает XML, делая некоторые предельные допущения.
Вы можете использовать XML для чего-то вроде документа текстового процессора, и в этом случае у вас есть сложный суп с тегами XML, встроенными повсюду; в этом случае моя библиотека не будет хорошей.
Но если вы используете XML для чего-то вроде файла конфигурации, моя библиотека довольно удобна. Вы определяете классы, которые описывают структуру XML, которую вы хотите, и как только у вас есть классы, существует метод для разметки в XML и его анализа. Фактический синтаксический анализ выполняется с помощью xml.dom.minidom, но затем моя библиотека извлекает данные и помещает их в классы.
Лучшая часть: вы можете объявить тип "Коллекция", который будет списком Python с нулевым или большим количеством других элементов XML внутри него. Это отлично подходит для таких вещей, как Atom или RSS-каналы (это была оригинальная причина, по которой я создал библиотеку).
Здесь URL: http://home.avvanta.com/~steveha/xe.html
Я был бы рад ответить на вопросы, если у вас есть.