2012-03-28 32 views
5

Tôi có một số mã python để tạo một số văn bản XML với xml.dom.minidom. Ngay bây giờ, tôi chạy nó từ thiết bị đầu cuối và nó kết quả đầu ra cho tôi một XML có cấu trúc như là một kết quả. Tôi muốn nó cũng tạo ra một tập tin XML và lưu nó vào đĩa của tôi. Làm thế nào có thể được thực hiện?Làm thế nào để lưu tệp XML vào đĩa bằng python?

Đây là những gì tôi có:

import xml 
from xml.dom.minidom import Document 
import copy 


class dict2xml(object): 
    doc  = Document() 

    def __init__(self, structure): 
     if len(structure) == 1: 
      rootName = str(structure.keys()[0]) 
      self.root = self.doc.createElement(rootName) 

      self.doc.appendChild(self.root) 
      self.build(self.root, structure[rootName]) 

    def build(self, father, structure): 
     if type(structure) == dict: 
      for k in structure: 
       tag = self.doc.createElement(k) 
       father.appendChild(tag) 
       self.build(tag, structure[k]) 

     elif type(structure) == list: 
      grandFather = father.parentNode 
      tagName  = father.tagName 
      # grandFather.removeChild(father) 
      for l in structure: 
       tag = self.doc.createElement(tagName.rstrip('s')) 
       self.build(tag, l) 
       father.appendChild(tag) 

     else: 
      data = str(structure) 
      tag  = self.doc.createTextNode(data) 
      father.appendChild(tag) 

    def display(self): 
     print self.doc.toprettyxml(indent=" ") 

chỉ này tạo ra XML. Làm thế nào tôi có thể lưu nó dưới dạng tập tin trên máy tính để bàn?

Trả lời

10

Bạn có thể muốn sử dụng Node.writexml() trên nút gốc của cây DOM XML của bạn. Điều này sẽ viết phần tử gốc của bạn và tất cả các phần tử con vào một tệp XML, làm tất cả các việc thụt lề becessary vv trên đường đi.

See the documentation for xml.dom.minidom:

Node.writexml(writer[, indent=""[, addindent=""[, newl=""]]])

Write XML để các đối tượng nhà văn. Người viết phải có phương thức write() khớp với giao diện đối tượng tệp. Thông số indent là thụt đầu dòng của nút hiện tại. Thông số addindent là thụt lề gia tăng để sử dụng cho các mã con của hiện tại. Tham số newl chỉ định chuỗi để sử dụng để chấm dứt dòng mới.

Đối với nút Tài liệu, mã hóa đối số từ khóa bổ sung có thể là được sử dụng để chỉ định trường mã hóa của tiêu đề XML.

Đã thay đổi trong phiên bản 2.1: Các thông số từ khóa tùy chọn thụt lề, addindent và newl được thêm vào để hỗ trợ đầu ra khá.

Thay đổi trong phiên bản 2.3: Đối với nút Tài liệu, có thể sử dụng từ khóa bổ sung mã hóa đối số để chỉ định trường mã hóa của tiêu đề XML .

Cách sử dụng sẽ có một chút như:

file_handle = open("filename.xml","wb") 
Your_Root_Node.writexml(file_handle) 
file_handle.close() 
+0

Vẫn không thể quản lý nó để làm việc –

+1

Chính xác bạn đã làm gì Thử câu hỏi đã chỉnh sửa của bạn chỉ bao gồm mã cho việc in ấn XML đẹp đến bàn điều khiển, nó không bao gồm nỗ lực của bạn để sử dụng 'writexml()', vì vậy chúng tôi không thể giúp bạn khắc phục điều đó. 'writexml()' và làm thế nào nó không hoạt động (có một thông báo lỗi? hoặc nó không hoạt động như bạn dự định?) –

+0

Mở ở chế độ "wb" didnt làm việc cho tôi tuy nhiên chỉ "w" làm việc –

6

Đọc về python files, nếu bạn xml làm chuỗi, bạn chỉ có thể ghi nó vào một tệp, ví dụ:

xml = "<myxmldata/>" 
f = open("myxmlfile.xml", "wb") 
f.write(xml) 
f.close() 

Để có được chuỗi xml từ các nút minidom bạn có thể sử dụng

xml = Node.toxml() 

hoặc bạn có thể viết trực tiếp đến một đối tượng có hỗ trợ viết ví dụ một tệp

Node.writexml(f) 
+0

Bạn bỏ lỡ một dấu ngoặc ở đó. ;) –

+0

@Lucas Pereira - "tệp" chỉ là 1/2 câu chuyện. Bạn cần 1) để tạo và điền một đối tượng SimplXML, sau đó 2) ghi đối tượng vào một tệp văn bản. Li-aung Yip thảo luận về cách thức. – paulsm4

+0

@ paulsm4 anh ấy nói anh ấy đã tạo đầu ra xml cho thiết bị đầu cuối –

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