Python працює з XML-файлами та модуль ntTree, RTFM Linux, DevOps та системне адміністрування

У стандартній бібліотеціPython є дві реалізації цього модуля - xml.etree.ElementTree та xml.etree.cElementTree .

xml.etree.ElementTree — реалізаціяAPI для роботи зXML файлами на чистомуPython, а xml.etree.cElementTree — те саме, але наC і дає істотний приріст продуктивності при обробці великих файлів.

Можна імпортувати їх так:

УPython версії 3.3 і вище необхідності такої try/except немає, т.к. інтерпретатор самостійно буде шукати cElementTree при імпорті ElementTree (та й уPython 2.6 і 2.7 cElementTree імпортується без проблем).

Парсинг файлу XML

Наприклад візьмемо простийXML -файл з таким вмістом:

В результаті ми повинні отримати список доступних методів для об'єкта tree :

У разі помилки синтаксисуXML — буде викликана помилка із зазначенням точного місця:

Тоді файл варто перевірити вXML -валідаторе, наприклад - тут >>> .

Для отримання кореневого елемента використовується метод getroot() :

Кожен елемент містить декілька параметрів:

  • tag - рядок, що відображає тип даних, які представляє елемент;
  • attrib - атрибути елемента, які зберігаються у словникPython ;
  • text - текстове значення елемента;
  • дочірніх елементів.

Наприклад, отримати тег кореневого елемента можна так:

Щоб отримати список прямих нащадків кореневого елемента - можна просто викликати цикл:

Можна також вивести тільки ключі, або ключі: значення:

Пошук елементів у файлі

Щоб перебрати всі елементи у файлі - можна скористатися методом iter() :

А щоб знайти лише один елемент — його тег можна передати аргументом цьому методу:

Можна виконати пошук за допомогоюXPath.

Наприклад, щоб відобразити кореневий елемент:

За допомогою // можна знайти всі вкладені елементи:

Або вкладені елементи вкладеного елемента:

Додавання записів у файл

Для початку - додамо функцію prettify:

Тепер відредагуємо код:

  • за допомогою ET.Element ми створюємо новий елемент з ім'ям NewElement;
  • потім - за допомогою SubElement - ми додаємо новий вкладений елемент з ім'ям NewSubelement всередину елемента в об'єкті new_element;
  • далі ми визначаємо параметр text об'єкта new_subelement , і задаємо закінчення 'NewSubelement' ;
  • після цього ми додаємо новий елемент new_element з усім вмістом до кореня нашого файлу;
  • останнім - викликаємо print() та функцію prettify() .

Для того, щоб у такому вигляді записати у файл — можна використовувати функцію indent() :

І викликати її, передавши кореневий елемент, перед записом у файл:

Файл з функціями можна завантажити тут >>> .

Щоб додати новий елемент всередину вже наявного - можна вказати його індекс в корені, наприклад: