I am trying to change some lines in an xml file. The below code can change title tag but I cannot change desc tag with re and replace. I am trying to upper case for all characters in title and desc tags.
foo.xml
<programme start="20200610110000 +0300" stop="20200610114000 +0300" channel="beIN SERIES SCI-FI HD">
<title lang="tr">Charmed S2 B5</title>
<category lang="tr">Life Style</category>
<desc lang="tr">Tür: Fantastik
[the truth about kat and dogs, 2.sezon, 2019] mel ve maggie, kaybolan macy'yi̇ büyü yoluyla bulmaya çalişirken harry, farkli bi̇r metod dener...
1998 yapimi 'charmed' di̇zi̇si̇ni̇n yeni̇den çevri̇mi̇nde cadilik yeteneği̇ne sahi̇p üç kizkardeşi̇n hi̇kayesi̇ kaldiği yerden devam edi̇yor... Her bi̇ri̇ farkli güçlere sahi̇p mel, macy ve maggie'ni̇n doğaüstü kötücül güçlere karşi koyduğu 'charmed'in yeni̇ sezonunu kaçirmayin!</desc>
</programme>
test.py
import os,re
file = open('foo.xml', 'r', encoding='utf8')
lines = file.readlines()
file.close()
c = open('new.xml', 'w', encoding='utf8')
for line in lines:
title = re.search('<title lang=".*?">(.*?)<', line, re.IGNORECASE)
desc = re.search('<desc lang=".*?">([^;]*)<\/desc>', line, re.MULTILINE)
if title:
title = title.group(1)
l = line.replace(title, title.upper())
c.write(l)
else:
if desc:
desc = desc.group(1)
n = line.replace(desc, desc.upper())
c.write(n)
else:
c.write(line)
As Alexander Pushkarev suggested, I've changed the code as below, but the the new xml file is identical with the original file. What do I miss?
tree = ET.parse('foo.xml')
root = tree.getroot()
for child in root:
# tree = ET.fromstring(xml_text)
el = tree.find(".//title")
el.text = el.text.upper()
# Look for desc element
el = tree.find(".//desc")
el.text = el.text.upper()
tree.write('new.xml')