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() :
І викликати її, передавши кореневий елемент, перед записом у файл:
Файл з функціями можна завантажити тут >>> .
Щоб додати новий елемент всередину вже наявного - можна вказати його індекс в корені, наприклад: