Распарсить строку в XML на Python
Есть XML такого вида
<offer>
<param name="Размер">36, 37, 38,42</param>
</offer>
<offer>
<param name="Размер">36, 42</param>
</offer>
Нужно привести к такому виду
<offer>
<param name="Размер">36</param>
<param name="Размер">37</param>
<param name="Размер">38</param>
<param name="Размер">42</param>
</offer>
<offer>
<param name="Размер">36</param>
<param name="Размер">42</param>
</offer>
Я пытался вначале сделать с помощью Lxml.etree, потом пробовал с помощью регулярки, так ничего и не получилось.
Подскажите примером кода или дайте ссылку где почитать (может литературу).
Стоит ли вообще привязываться к XML или работать как с обычным текстовым файлом?
Ответы (1 шт):
Автор решения: Alexander Chernin
→ Ссылка
Для примера взял стандартный парсер xml.etree.ElementTree
Xml может выглядеть как угодно, но для простоты пусть будет такая структура:
xml = '''<?xml version="1.0"?>
<data>
<offer>
<param name="Размер">36, 37, 38,42</param>
</offer>
<offer>
<param name="Размер">36, 42</param>
</offer>
</data>'''
# импорт либы с синонимом
import xml.etree.ElementTree as ET
root = ET.fromstring(xml)
# Найдем все offer на любой глубине
for offer in root.findall('.//offer'):
# Получаем значение и разбиваем его в массив
values = offer.find('param').text.split(',')
# Очистка родителя
offer.clear()
for v in values:
# Создаем новый дочерний узел
param = ET.SubElement(offer, 'param')
# Добавляем ему атрибут
param.set('name', 'Размер')
# Устанавливаем значение
param.text = v.strip() # убираем лишние пробелы справа и слева от значения
# Вывод результата в консоль
ET.dump(offer)