Розбираємо XML стандартними засобами Python, Стрілець Coder

Стандартна бібліотека мови Python містить готовий XML аналізатор (парсер). Доступ до нього здійснюється через пакет xml.

Завантаження з файлу:

Даний приклад вже використовувався для аналізу XML в Delphi. Сьогодні ми будемо виконувати його аналіз засобами Python.

Завантажимо документ XML.

Розбір простого вузла

Для пошуку вузлів за назвою тега служить метод getElementsByTagName(tagName). Цей метод повертає список тегів з ім'ям, зазначеним як параметр. Якщо тег із таким ім'ям лише один, можна відразу звернутися до нього за індексом 0.

Розбір складного вузла на прикладі масиву

Вузол, позначений array тегом, містить справжній масив елементів. Однак його розбір не становить особливої ​​складності. Спочатку отримуємо потрібний дочірній вузол через колекцію childNodes або метод getElementsByTagName і працюємо з ним як із простим вузлом.

Як приклад розглянемо обхід дочірніх вузлів у циклі.

Якщо якийсь із дочірніх вузлів не є простим, працюємо з ним як із звичайним складним вузлом. Знаходимо необхідний дочірній вузол тощо. Але що робити, коли складний вузол містить ще й значення?

Розпізнаються кілька типів вузлів, але з них три.

  • DOCUMENT_NODE – документ;
  • ELEMENT_NODE – елемент. Звичайний вузол;
  • TEXT_NODE – текст. Цей тип вузла відповідає значенню тега.

Виконаємо розбір наведеного вище складного вузла з урахуванням даних зауважень.

Порівняння зі стандартними парсерами деяких інших мов

Стандартний XML парсер Python не відрізняється зручністю і значно поступається своїми можливостями іншим парсерам навіть для самого Python (тому ж lxml).При цьому головним недоліком як щодо зручності так і функціоналу є, звичайно, відсутність можливості працювати з XML інакше як засобами DOM у поєднанні з явно недостатньо продуманою об'єктною моделлю і, як наслідок, невиправдано громіздким інструментарієм.

Для порівняння. TXMLDocument у Delphi також працює тільки з DOM, але розбір структури документа з його допомогою набагато простіше та зручніше багато в чому завдяки відсутності необхідності створювати в коді складні конструкції на кшталт тих, що розробник змушений використовувати у Python.

Що стосується роботи з XML у .NET Framework, то тут немає сенсу навіть порівнювати. LINQ to XML, підтримка XPath "з коробки" ... На щастя, в Iron Python все це доступно.

Звичайно, можливостей стандартного парсера цілком достатньо для вирішення задач практично будь-якої складності. Тільки які витрати на його основі.