Я хочу заменить текст из дочернего элемента в xml на python

#python #python-3.x #xml

Вопрос:

Я хочу заменить имя пользователя и пароль из XML и сохранить структуру такой, какая она есть. Не могли бы вы помочь мне, пожалуйста, я перепробовал много вещей, но они не работали для меня.

Мой текущий xml:

 lt;?xml version="1.1" encoding="UTF-8"?gt; lt;Settingsgt;  lt;Usergt;  lt;Hostnamegt;localhostlt;/Hostnamegt;  lt;Databasenamegt;xlt;/Databasenamegt;  lt;Usernamegt;ABClt;/Usernamegt;  lt;Passwordgt;124lt;/Passwordgt;  lt;Remembergt;lt;/Remembergt;  lt;/Usergt; lt;/Settingsgt;  

Мой Код:

 mytree = ET.parse('project/config.xml') myroot = mytree.getroot()  ... username = self.username.text() password = self.password.text()  if self.rmbCheckBox.checkState() == Qt.Checked:  for x in myroot.findall('User'):  #Here i want to change the XML 'Username' and 'Password'  item = x.find('Username') mytree.write('user.xml')   

Ответ №1:

Попробуйте сделать следующее

 import xml.etree.ElementTree as ET   xml = '''lt;?xml version="1.1" encoding="UTF-8"?gt; lt;Settingsgt;  lt;Usergt;  lt;Hostnamegt;localhostlt;/Hostnamegt;  lt;Databasenamegt;xlt;/Databasenamegt;  lt;Usernamegt;ABClt;/Usernamegt;  lt;Passwordgt;124lt;/Passwordgt;  lt;Remembergt;lt;/Remembergt;  lt;/Usergt; lt;/Settingsgt;'''  root = ET.fromstring(xml) root.find('.//Username').text = 'new_user_name' root.find('.//Password').text = 'new_password' ET.dump(root)  

выход

 lt;Settingsgt;  lt;Usergt;  lt;Hostnamegt;localhostlt;/Hostnamegt;  lt;Databasenamegt;xlt;/Databasenamegt;  lt;Usernamegt;new_user_namelt;/Usernamegt;  lt;Passwordgt;new_passwordlt;/Passwordgt;  lt;Remember /gt;  lt;/Usergt; lt;/Settingsgt;