2013-03-04 2 views

ответ

2

Вы не можете сделать это напрямую. Но есть два хакерских способа сделать это.

Во-первых, это не так сложно снять. Например:

xml = x.toxml() 
with open('foo.xml', 'w') as f: 
    f.write(xml.partition('>')[2]) 

Или, если вы не хотите, чтобы генерировать всю строку в памяти, вы можете написать файл оболочку, которая проглатывает пролог:

class SkipFirstWriter(object): 
    def __init__(self, f): 
     self.f = f 
     self.firstline = True 
    def write(self, buf): 
     if self.firstline: 
      if '>' in buf: 
       self.f.write(buf.partition('>')[2]) 
       self.firstline = False 
     else: 
      self.f.write(buf) 
with open('foo.xml', 'w') as f: 
    skipper = SkipFirstWriter(f) 
    x.writexml(skipper) 

Очевидно глотания «все до первый > "- это немного хакерский способ обнаружить пролог XML ... но он работает. В реальном коде я бы добавил комментарий, объясняющий, что это работает, и почему, но используйте его.

В качестве альтернативы, вы можете рассчитывать на то, что документ-без пролога является первым потомком документа, и сделать это:

with open('foo.xml', 'w') as f: 
    x.firstChild.writexml(f) 
+0

@abamert спасибо большое за ответ YOUT – Tof

Смежные вопросы