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
  How do I write a single 8-bit byte to a file? MysticLord 2 298 Sep-03-2020, 12:27 PM
Last Post: MysticLord
  unable to write to log file Mekala 2 320 Aug-12-2020, 11:02 PM
Last Post: Mekala
  Iterate 2 large text files across lines and replace lines in second file medatib531 13 610 Aug-10-2020, 11:01 PM
Last Post: medatib531
  List Won't Write in Text File IILawrenceII 4 398 Jul-17-2020, 11:16 PM
Last Post: j.crater
  Process Data from one csv file and write to another CSV file specific column ajin9581 1 371 Jun-17-2020, 06:00 PM
Last Post: buran
  Write SQLite query result to file hjk6734 1 349 May-27-2020, 12:17 PM
Last Post: menator01
  Append JSON's and write to file faqsap 4 560 May-15-2020, 04:20 PM
Last Post: faqsap
  Print/write to file function tpolim008 4 547 Apr-01-2020, 07:59 PM
Last Post: tpolim008
  Write object to file medatib531 7 611 Apr-01-2020, 06:25 PM
Last Post: BrendanD
  can we write command output to new csv file using Panda package? PythonBeginner_2020 3 589 Mar-13-2020, 12:38 PM
Last Post: ndc85430

Forum Jump:

User Panel Messages

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