Заменить значения одинаковых тегов
Есть например xml файл:
<?xml version="1.0" encoding="UTF-8"?>
<shiporder orderid="889923"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
<orderperson>John Smith</orderperson>
<shipto>
<name>Ola Nordmann</name>
<address>Langgt 23</address>
<city>4000 Stavanger</city>
<country>Norway</country>
</shipto>
<item>
<title>Empire Burlesque</title>
<note>Special Edition</note>
<quantity>1</quantity>
<price>10.90</price>
</item>
<item>
<title>Hide your heart</title>
<quantity>1</quantity>
<price>9.90</price>
</item>
</shiporder>
Требуется заменить каждый тег <title>
на любые рандомные слова из русских букв
Пробую сделать так:
with open('test1.xml','r') as f:
contents=f.read() #open xml file
#print(contents)
alphabet_upper = [chr(ord("А") + i) for i in range(32)]
length_of_string = 7
opentag='<title>'
closetag='</title>'
oldtext=contents[contents.find(opentag)+7:contents.find(closetag)]
newtext=''.join(random.choice(alphabet_upper) for i in range(length_of_string))
contents=contents.replace(oldtext,newtext)
with open('testxml.xml','w') as f:
f.write(contents) #write contents to file
print(contents)
Но меняется только первый тэг, а второй остается неизменным. Как сделать, что бы все тэги изменились и у каждого было рандомное значение ?
Подскажите, пожалуйста.
Этот xml файл как пример, на котором тестирую, реальный файл содержит примерно около 50 тегов, которые должны изменится на рандомное значение
Ответы (1 шт):
Автор решения: Alex Titov
→ Ссылка
Сильно рекомендуется при обработке XML использовать именно XML-библиотеку, так что код мог бы выглядеть вот так. Ну а в random
уже есть нужная функция для последовательности
import random
import xml.etree.ElementTree as ET
alphabet_upper = [chr(ord("А") + i) for i in range(32)]
length_of_string = 7
tree = ET.parse('test1.xml')
root = tree.getroot()
for title_elem in root.findall('item/title'):
title_elem.text = ''.join(random.choices(alphabet_upper, k =length_of_string))
tree.write('test1.xml', encoding='utf-8', xml_declaration=True)