I've now been getting used to the etree option and I want to take specific XML Tags and Texts from one file to another.
My code looks like this:
Thanks in advance for any advice, I really appreciate it.
My code looks like this:
# coding=utf-8 import os import xml.etree.ElementTree as et # Folgender Block schreibt die Daten in ein Objekt base_path = os.path.dirname(os.path.realpath(__file__)) xml_file1 = os.path.join(base_path, "data\\file1.xml") xml_file2 = os.path.join(base_path, "data\\file2.xml") # Die Datei, dessen inhalt ergänzt wird tree1 = et.parse(xml_file1) root1 = tree1.getroot() # Die Datei, dessen Inhalt mit File1 verglichen wird tree2 = et.parse(xml_file2) root2 = tree2.getroot() # Dictionaries für die jeweiligen XML-Files dict1 = {} dict2 = {} # Kopieren der wichtigen Werte von SRC zu Target_tree, src_elements = tree2.findall('.//Mdata') target_tree = tree1.find('.//Movieparameter') for src_element in src_elements: for sub_src_element in src_element.getchildren(): if sub_src_element.tag == "Price" or "Reseller": target_tree.append(sub_src_element) tree1.write("infodump.xml")My Files look like this:
<BASE> <Meta> <Randominfo>Random</Randominfo> </Meta> <MovieList> <Movie> <Movieparameters> <Movieparameter genre="Action" Title="Matrix"> <Length>120 mins</Length> <Blu-Ray>Yes</Blu-Ray> <Available>No</Available> <LentTo>Mr Anderson</LentTo> </Movieparameter> </Movieparameters> <Storeparameter> <ID>0001</ID> </Storeparameter> </Movie> <Movie> <Movieparameters> <Movieparameter genre="Action" Title="Matrix Reloaded"> <Length>111 mins</Length> <Blu-Ray>Yes</Blu-Ray> <Available>No</Available> <LentTo>Carrie Ann Moss</LentTo> </Movieparameter> </Movieparameters> <Storeparameter> <ID>0005</ID> </Storeparameter> </Movie> <Movie> <Movieparameters> <Movieparameter genre="DogMovie" Title="Woofworld"> <Length>120 mins</Length> <Blu-Ray>no</Blu-Ray> <Available>No</Available> <LentTo>Mr Woofer</LentTo> </Movieparameter> </Movieparameters> <Storeparameter> <ID>0002</ID> </Storeparameter> </Movie> <Movie> <Movieparameters> <Movieparameter genre="Live Concert" Title="BORK"> <Length>30 mins</Length> <Blu-Ray>Yes</Blu-Ray> <Available>Yes</Available> <LentTo>None</LentTo> </Movieparameter> </Movieparameters> <Storeparameter> <ID>0003</ID> </Storeparameter> </Movie> </MovieList> </BASE>File2
<ArrayOfData> <Mdata> <MovieGenre>Action</MovieGenre> <MovieName>Matrix</MovieName> <IMDBID>0178544444</IMDBID> <Reseller>SmithAndSmith</Reseller> <Price>10 Eur</Price> <Length>120 mins</Length> <Blu-Ray>Yes</Blu-Ray> </Mdata> <Mdata> <MovieGenre>Action</MovieGenre> <MovieName>Matrix Reloaded</MovieName> <IMDBID>0178555555</IMDBID> <Reseller>SmithAndSmith</Reseller> <Price>12 Eur</Price> <Length>111 mins</Length> <Blu-Ray>Yes</Blu-Ray> </Mdata> <Mdata> <MovieGenre>DogMovie</MovieGenre> <MovieName>WoofWorld</MovieName> <IMDBID>09647852154</IMDBID> <Reseller>DogsAndDogs</Reseller> <Price>5 Eur</Price> <Length>120 mins</Length> <Blu-Ray>No</Blu-Ray> </Mdata> <MovieGenre>Live Concert</MovieGenre> <MovieName>BORK</MovieName> <IMDBID>1337852</IMDBID> <Reseller>DogsAndDogs</Reseller> <Price>5 Eur</Price> <Length>120 mins</Length> <Blu-Ray>Yes</Blu-Ray> <Mdata> </Mdata> </ArrayOfData>My result looks like this:
<BASE> <Meta> <Randominfo>Random</Randominfo> </Meta> <MovieList> <Movie> <Movieparameters> <Movieparameter Title="Matrix" genre="Action"> <Length>120 mins</Length> <Blu-Ray>Yes</Blu-Ray> <Available>No</Available> <LentTo>Mr Anderson</LentTo> <MovieGenre>Action</MovieGenre> <MovieName>Matrix</MovieName> <IMDBID>0178544444</IMDBID> <Reseller>SmithAndSmith</Reseller> <Price>10 Eur</Price> <Length>120 mins</Length> <Blu-Ray>Yes</Blu-Ray> <MovieGenre>Action</MovieGenre> <MovieName>Matrix Reloaded</MovieName> <IMDBID>0178555555</IMDBID> <Reseller>SmithAndSmith</Reseller> <Price>12 Eur</Price> <Length>111 mins</Length> <Blu-Ray>Yes</Blu-Ray> <MovieGenre>DogMovie</MovieGenre> <MovieName>WoofWorld</MovieName> <IMDBID>09647852154</IMDBID> <Reseller>DogsAndDogs</Reseller> <Price>5 Eur</Price> <Length>120 mins</Length> <Blu-Ray>No</Blu-Ray> </Movieparameter> </Movieparameters> <Storeparameter> <ID>0001</ID> </Storeparameter> </Movie> <Movie> <Movieparameters> <Movieparameter Title="Matrix Reloaded" genre="Action"> <Length>111 mins</Length> <Blu-Ray>Yes</Blu-Ray> <Available>No</Available> <LentTo>Carrie Ann Moss</LentTo> </Movieparameter> </Movieparameters> <Storeparameter> <ID>0005</ID> </Storeparameter> </Movie> <Movie> <Movieparameters> <Movieparameter Title="Woofworld" genre="DogMovie"> <Length>120 mins</Length> <Blu-Ray>no</Blu-Ray> <Available>No</Available> <LentTo>Mr Woofer</LentTo> </Movieparameter> </Movieparameters> <Storeparameter> <ID>0002</ID> </Storeparameter> </Movie> <Movie> <Movieparameters> <Movieparameter Title="BORK" genre="Live Concert"> <Length>30 mins</Length> <Blu-Ray>Yes</Blu-Ray> <Available>Yes</Available> <LentTo>None</LentTo> </Movieparameter> </Movieparameters> <Storeparameter> <ID>0003</ID> </Storeparameter> </Movie> </MovieList> </BASE>But I want it to look like this:
<ROOT> <Meta> <Randominfo>Random</Randominfo> </Meta> <MovieList> <Movie> <Movieparameters> <Movieparameter genre="Action" Title="Matrix"> <Length>120 mins</Length> <Blu-Ray>Yes</Blu-Ray> <Available>No</Available> <LentTo>Mr Anderson</LentTo> <Reseller>SmithAndSmith</Reseller> <Price>10 Eur</Price> </Movieparameter> </Movieparameters> <Storeparameter> <ID>0001</ID> </Storeparameter> </Movie> <Movie> <Movieparameters> <Movieparameter genre="Action" Title="Matrix Reloaded"> <Length>111 mins</Length> <Blu-Ray>Yes</Blu-Ray> <Available>No</Available> <LentTo>Carrie Ann Moss</LentTo> <Reseller>SmithAndSmith</Reseller> <Price>12 Eur</Price> </Movieparameter> </Movieparameters> <Storeparameter> <ID>0005</ID> </Storeparameter> </Movie> <Movie> <Movieparameters> <Movieparameter genre="DogMovie" Title="Woofworld"> <Length>120 mins</Length> <Blu-Ray>no</Blu-Ray> <Available>No</Available> <LentTo>Mr Woofer</LentTo> <Reseller>DogsAndDogs</Reseller> <Price>5 Eur</Price> </Movieparameter> </Movieparameters> <Storeparameter> <ID>0002</ID> </Storeparameter> </Movie> <Movie> <Movieparameters> <Movieparameter genre="Live Concert" Title="BORK"> <Length>30 mins</Length> <Blu-Ray>Yes</Blu-Ray> <Available>Yes</Available> <LentTo>None</LentTo> <Reseller>DogsAndDogs</Reseller> <Price>5 Eur</Price> </Movieparameter> </Movieparameters> <Storeparameter> <ID>0003</ID> </Storeparameter> </Movie> </MovieList> </ROOT>The exclusion of all the Elements that are not Price and Reseller doesn't work and I don't know how to specify them. Also as you can see, it pastes a majority of the File2 document in one place in File1 instead of splitting it up. I also don't really know how to fix this problem and I am running out of ideas.
Thanks in advance for any advice, I really appreciate it.