添加一行XML我從保留的撲救,但要覆蓋輸出文件每當我創建的XmlReportGenerator
使用LXML
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)
一個新的實例,其中樣本輸出時間的方法:
<results>
<FlightTravel>
<Paxes>4</Paxes>
<Id>259183</Id>
</FlightTravel>
</results>
如何修改add_flight_row方法來添加新行?例如,我想是這樣的:
<results>
<FlightTravel>
<Paxes>4</Paxes>
<Id>259183</Id>
</FlightTravel>
<FlightTravel>
<Paxes>9</Paxes>
<Id>123456</Id>
</FlightTravel>
</results>
我加入的測試方法:
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
這是我如何使用它:
x=XmlReportGenerator()
x.test_test("a","b")
x.Save("test.xml")
x=XmlReportGenerator()
x.test_test("c","d")
x.Save("test.xml")
和結果,我有:
<results>
<FlightTravel>
<Flights/>
<QuantityOfPassengers>c</QuantityOfPassengers>
<Id>d</Id>
</FlightTravel>
</results>
而不是
<results>
<FlightTravel>
<Flights/>
<QuantityOfPassengers>a</QuantityOfPassengers>
<Id>b</Id>
</FlightTravel>
<FlightTravel>
<Flights/>
<QuantityOfPassengers>c</QuantityOfPassengers>
<Id>d</Id>
</FlightTravel>
</results>
你有沒有良好的XML在您的兩個例子。 – Jacob 2011-05-30 09:58:16
不,我可以用IE打開它,所以沒關係。有一個節點飛行,但不要看它。現在它不重要:) – user278618 2011-05-30 10:11:12
既然你沒有顯示調用'add_flight_row'的代碼,那麼我猜''''''''每個'flight_travel_reservation'的每個元素都會'保存'每個'results'樹,或者根本就沒有循環。代碼與輸出不匹配,因此請粘貼實際的代碼和輸出。 – msw 2011-05-30 11:07:32