Python Forum
Replace XML tag and write to the same file
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Replace XML tag and write to the same file
#1
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>
Reply
#2
Please show what you have tried so far.
Reply
#3
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>
Reply
#4
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)
Reply
#5
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.
Output:
<?xml version="1.0" encoding="utf-8"?> <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 </fileStoreDir> <provider> <identity>123456</identity> <endpoint>some point.com</endpoint> </provider> </provider></chain></config>
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  If I open a file write or append, is the file loaded into RAM? Pedroski55 11 1,118 Jan-14-2026, 07:49 AM
Last Post: Pedroski55
  how to write/overwrite data in a txt. file according to inp Quinn 2 1,587 Aug-12-2025, 04:20 PM
Last Post: Quinn
  How can I write formatted (i.e. bold, italic, change font size, etc.) text to a file? JohnJSal 13 36,670 May-20-2025, 12:26 PM
Last Post: hanmen9527
Question [SOLVED] [Beautiful Soup] Replace tag.string from another file? Winfried 2 1,673 May-01-2025, 03:43 PM
Last Post: Winfried
  Replace values in Yaml file with value in dictionary PelleH 1 3,818 Feb-11-2025, 09:51 AM
Last Post: alexjordan
  How to write variable in a python file then import it in another python file? tatahuft 4 2,253 Jan-01-2025, 12:18 AM
Last Post: Skaperen
  [SOLVED] [Linux] Write file and change owner? Winfried 6 3,193 Oct-17-2024, 01:15 AM
Last Post: Winfried
  What does .flush do? How can I change this to write to the file? Pedroski55 3 2,259 Apr-22-2024, 01:15 PM
Last Post: snippsat
  Last record in file doesn't write to newline gonksoup 3 2,852 Jan-22-2024, 12:56 PM
Last Post: deanhystad
  write to csv file problem jacksfrustration 11 8,640 Nov-09-2023, 01:56 PM
Last Post: deanhystad

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020