Найти тему

Рубрика по "просьбе подписчика". Работа с XML файлом.

По запросу моего подписчика Евгений Засимов, а именно:

ДД сделайте пример изменения файла - к примеру есть несколько файлов xml и внутри них нужно поменять адреса организаций, спасибо

У нас есть некий файл с расширением XML.

XML - это расширяемый язык разметки.

Подробнее можно почитать тут.

Создадим 3 xml файла с содержимым:

datasite_1
<?xml version="1.0" ?>
<header>
<sitename name="1" />
<sitephone phone="77778889966" />
<siteaddress address="Street name 1" />
</header>
datasite_2
<?xml version="1.0" ?>
<header>
<sitename name="2" />
<sitephone phone="77778889966" />
<siteaddress address="Street name 2" />
</header>
datasite_3
<?xml version="1.0" ?>
<header>
<sitename name="2" />
<sitephone phone="77778889966" />
<siteaddress address="Street name 3" />
</header>

Теперь давайте напишем программу, которая поменяет адрес в каждом файле.

Листинг 1
# Импортируем бибилиотеку для работы с XML
import xml.etree.ElementTree as ET
# Создадим словарь на какие значения мы будем менять адрес в XML файле
# Словрь id магазина - адрес магазина
address = {1: 'Change to Street name 34', 2: 'Change to Street name 35', 3 : 'Change to Street name 36'}
# Создадим переменную в которой будем хранить редактируемые файа
file_list = ['datasite_1.xml', 'datasite_2.xml', 'datasite_3.xml']
# Реализуем цикл в котором будем изенять аттрибут address в теге siteaddress
# А получать новые данные из словаря
for file in file_list:
et = ET.parse(file)
data = et.getroot()
id = int(data.find('siteid').attrib['id'])
newValue = address.get(id)
data.find('siteaddress').attrib['address'] = newValue
et.write(file)

После выполнения кода в наших XML изменились данные под тегом siteaddress.

datasite_1
<?xml version="1.0" ?>
<header>
<sitename name="1" />
<sitephone phone="77778889966" />
<siteaddress address="Change to Street name 34" />
</header>
datasite_2
<?xml version="1.0" ?>
<header>
<sitename name="2" />
<sitephone phone="77778889966" />
<siteaddress address="Change to Street name 35" />
</header>
datasite_3
<?xml version="1.0" ?>
<header>
<sitename name="2" />
<sitephone phone="77778889966" />
<siteaddress address="Change to Street name 36" />
</header>

Тег в XML это значение которое находится в <> (угловых скобках), а атрибутом(свойствами) будет является то, что находится внутри <> (угловых скобках).

В реально же мире алгоритм обработки файлов XML может быть горадно сложнее, в нём может будет куда больше параметров.

Надеюсь, я смог привести корректный пример.

Другие статьи канала:

Изучаю языка программирования Python. Основы синтаксиса. Работа с файлом. Часть 6.1
Изучаю языки програмирования21 марта 2023
Изучаю язык программирования Python. Основы синтаксиса. Работа с файлом. Часть 6
Изучаю языки програмирования20 марта 2023
Изучаю язык программирования Python. Основы синтаксиса. Методы. Часть 5.1
Изучаю языки програмирования17 марта 2023