Replace XML tag and write to the same file - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Replace XML tag and write to the same file (/thread-25259.html) |
Replace XML tag and write to the same file - krish216 - Mar-24-2020 Hello, I have a xml file with name "binary.xml" with below contents- Need to replace the value of tag identity from ABCDEFG to some new value e.g. 123456. When I'm trying to replace using re file is getting over written. Can you help with a snippet? <config version="v1"> <chain template="file-system"> // Use the “”file-system” template <provider id="file-system" type="file-system"> // Modify the “file-system” binary provider <fileStoreDir>$FILESTORE/binaries</fileStoreDir> // Override the <fileStoreDir> attribute </provider> <provider> <identity>ABCDEFG</identity> <endpoint>some point.com</endpoint> </provider> </config> RE: Replace XML tag and write to the same file - Larz60+ - Mar-25-2020 Please show what you have tried so far. RE: Replace XML tag and write to the same file - snippsat - Mar-25-2020 Use BS-4 find the tag then use string.replace_with .from bs4 import BeautifulSoup xml = '''\ <provider> <identity>ABCDEFG</identity> <endpoint>some point.com</endpoint> </provider>''' soup = BeautifulSoup(xml, 'xml') >>> result = soup.find('identity') >>> result.string.replace_with('123456') >>> soup <?xml version="1.0" encoding="utf-8"?> <provider> <identity>123456</identity> <endpoint>some point.com</endpoint> </provider> RE: Replace XML tag and write to the same file - krish216 - Mar-25-2020 Thanks Larz60+ & Snippsat. I'm able to pass through and new file is being generated with below code but this is deleting the comments which are already there in source xml file. Any thoughts on how to get the comments as well to the new file ? import xml.etree.ElementTree as ET def newidentity(filename): tree = ET.ElementTree(file=filename) root = tree.getroot() for id in root.iter('identity'): print id.text identity.text = "123456" tree = ET.ElementTree(root) print tree with open("newfile.xml", "wb") as somefile: tree.write(somefile) if __name__ == "__main__": newidentity(filename) RE: Replace XML tag and write to the same file - snippsat - Mar-26-2020 I helped before with ElementTree,but now i do not touch it. As i have spend unnecessary time to fix stuff in ElementTree,that eg BS-4 or lxml do right. from bs4 import BeautifulSoup soup = BeautifulSoup(open('binary.xml', encoding='utf-8'), 'xml') result = soup.find('identity') result.string.replace_with('123456') with open('out.xml', 'w', encoding='utf-8') as f: f.write(str(soup))Now get a validat .xml file back where only wanted change is made. if want file overwritten give same name when write binary.xml ,that will also work.
|