I have a method which saves from reservations, but overwrites the output file every time when I create a new instance of XmlReportGenerator
from lxml import etree
from Flights.FlightTravelReservation import FlightTravelReservation
class XmlReportGenerator:
root = None
doc = None
def __init__(self):
self.root = etree.Element('results')
self.doc = etree.ElementTree(self.root)
def add_flight_row(self, flight_travel_reservation):
page_element = etree.SubElement(self.root, 'FlightTravel')
etree.SubElement(page_element, 'QuantityOfPassengers').text =
str(len(flight_travel_reservation.paxes))
etree.SubElement(page_element,'Id').text =
flight_travel_reservation.reservation_id
def Save(self, path = 'Flights.xml'):
outFile = open(path, 'wb')
self.doc.write(outFile)
Where sample output is:
<results>
<FlightTravel>
<Paxes>4</Paxes>
<Id>259183</Id>
</FlightTravel>
</results>
How do I modify add_flight_row method to add new rows? For example, I want something like:
<results>
<FlightTravel>
<Paxes>4</Paxes>
<Id>259183</Id>
</FlightTravel>
<FlightTravel>
<Paxes>9</Paxes>
<Id>123456</Id>
</FlightTravel>
</results>
I added test method:
def test_test(self,a,b):
page_element = etree.SubElement(self.root,'FlightTravel')
etree.SubElement(page_element,'QuantityOfPassengers').text = a
etree.SubElement(page_element,'Id').text = b
return page_element
And this is how I use it:
x=XmlReportGenerator()
x.test_test("a","b")
x.Save("test.xml")
x=XmlReportGenerator()
x.test_test("c","d")
x.Save("test.xml")
and in result I have:
<results>
<FlightTravel>
<Flights/>
<QuantityOfPassengers>c</QuantityOfPassengers>
<Id>d</Id>
</FlightTravel>
</results>
instead of
<results>
<FlightTravel>
<Flights/>
<QuantityOfPassengers>a</QuantityOfPassengers>
<Id>b</Id>
</FlightTravel>
<FlightTravel>
<Flights/>
<QuantityOfPassengers>c</QuantityOfPassengers>
<Id>d</Id>
</FlightTravel>
</results>
add_flight_rowI guess that you areSaveing everyresultstree for each element offlight_travel_reservationor are not looping at all. The code doesn't match the output, either, so please paste the actual code and output.Savemust generate a well-formed document it cannot simply concatenate today's<results></results>onto yesterday's. Thus phihag's answer.