添加一行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