Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

create a tag at top of xml file using python

I have xml file named ‘test.xml’ like below format

<final_output>
    <career_profile>
        <output>
            <Template OriginalSentence="1" SentenceID="1" RecordID="0">
                <Employer Type="String"><Value>HCL TECHNOLOGY LTD</Value></Employer>
                <duration><Value>JAN 2018 to till date</Value></duration>
            </Template>
        </output>
    </career_profile>
</final_output>

I want to add a final_file tag on top of test.xml file using python.

The output should look like:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

<final_file>
    <final_output>
        <career_profile>
            <output>
                <Template OriginalSentence="1" SentenceID="1" RecordID="0">
                    <Employer Type="String"><Value>HCL TECHNOLOGY LTD</Value></Employer>
                    <duration><Value>JAN 2018 to till date</Value></duration>
                </Template>
            </output>
        </career_profile>
    </final_output>
</final_file>

For this I have used additional xml file named ‘random.xml’ file containing <final_file> </final_file> .

random.xml looks like:

<final_file>

</final_file>

I am not getting the <final_output> </final_output> tag in the resultant output.xml.

I have tried the following code:

import xml.etree.ElementTree as ET

xmlfile1 = "random.xml"
xmlfile2 = "test.xml"

tree1 = ET.parse(xmlfile1)
tree2 = ET.parse(xmlfile2)

root1 = tree1.getroot()
root2 = tree2.getroot()

root1.extend(root2)

tree1.write('output.xml')

But I am getting like:

<final_file>
   
        <career_profile>
            <output>
                <Template OriginalSentence="1" SentenceID="1" RecordID="0">
                    <Employer Type="String"><Value>HCL TECHNOLOGY LTD</Value></Employer>
                    <duration><Value>JAN 2018 to till date</Value></duration>
                </Template>
            </output>
        </career_profile>
    
</final_file>

I have tried with

random.xml:

<final_file>
    <final_output>

    </final_output>
</final_file>

But I am getting like this:

<final_file>
   <final_output>    </final_output>

       <career_profile>
            <output>
                <Template OriginalSentence="1" SentenceID="1" RecordID="0">
                    <Employer Type="String"><Value>HCL TECHNOLOGY LTD</Value></Employer>
                    <duration><Value>JAN 2018 to till date</Value></duration>
                </Template>
            </output>
        </career_profile>

</final_file>

Is there a way to do this without additional random.xml file.

The thing I am expecting is that to existing .xml file <finalfile*> tag is to be inserted at top and </*final_file> tag at bottom of the file.

>Solution :

If you want to use xml package then the simple solution will be

from xml.etree import ElementTree

xml_input = "input.xml"
xml_output = "output.xml"

tree_input = ElementTree.parse(xml_input)
root = tree_input.getroot()

# add new tag
new_root = ElementTree.Element("final_file")
new_root.insert(0, root)

# format XML
ElementTree.indent(new_root)

print(ElementTree.dump(new_root))

with open(xml_output, "wb") as xml_file:
    xml_file.write(ElementTree.tostring(new_root))

in this case, the output will be

<final_file>
  <final_output>
    <career_profile>
      <output>
        <Template OriginalSentence="1" SentenceID="1" RecordID="0">
          <Employer Type="String">
            <Value>HCL TECHNOLOGY LTD</Value>
          </Employer>
          <duration>
            <Value>JAN 2018 to till date</Value>
          </duration>
        </Template>
      </output>
    </career_profile>
  </final_output>
</final_file>
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading