2012-05-14 30 views
5

Tôi có một đối tượng etree gọi projectxml:Làm thế nào để lưu một đối tượng etree xml? tiết kiệm bốc lxml vấn đề đối tượng etree

projetxml type <type 'lxml.etree._Element'> 

tôi cần phải lưu nó vào đĩa, vì vậy tôi chuyển nó sang cây yếu tố:

savedxml=et.ElementTree(projetxml) 
savedxml.write('/home/simon/Vysis.xml') 

Một kịch bản khác có để tải các Vysis.xml và hai tập tin khác cùng loại:

vysis=et.parse('/home/simon/Vysis.xml') 
asi=et.parse('/home/simon/ASI.xml') 
psi=et.parse('/home/simon/PSI.xml') 

Bây giờ asi, psi và vysis lxml đối tượng là các loại ví dụ:

<lxml.etree._ElementTree object at 0xa7eaf8c> 

Vấn đề của tôi là tôi không còn có thể làm:

R=et.Element('DataBase') 
R.append(asi) 
R.append(psi) 
R.append(vysis) 

vì lỗi:

R.append(asi) 
    File "lxml.etree.pyx", line 697, in lxml.etree._Element.append (src/lxml /lxml.etree.c:35471) 
TypeError: Argument 'element' has incorrect type (expected lxml.etree._Element, got lxml.etree._ElementTree) 

Tôi cho rằng tôi có hai giải pháp. Điều đầu tiên có thể là tránh chuyển đổi etree.Element thành etree.ElementTree và lưu nó "trực tiếp", nhưng tôi không biết làm thế nào. Giải pháp thứ hai sẽ là để chuyển đổi trở lại etree.ElementTree để etree.Element loại ... Nên có một giải pháp sạch để lưu/tải một đối tượng xml?

+0

có lẽ đây là những gì bạn đang tìm kiếm ?: http://stackoverflow.com/questions/8274438/saving-an-lxml-etree-elementtree-object – cptPH

Trả lời

6

parse function trả về một ElementTree, không phải là Element. Nếu bạn muốn sử dụng kết quả của parse làm yếu tố, bạn cần gọi getroot.

vysis=et.parse('/home/simon/Vysis.xml').getroot() 
asi=et.parse('/home/simon/ASI.xml').getroot() 
psi=et.parse('/home/simon/PSI.xml').getroot() 

R=et.Element('DataBase') 
R.append(asi) 
R.append(psi) 
R.append(vysis) 
+0

Cảm ơn bạn, đó là nó !! –

Các vấn đề liên quan