2008-08-27 25 views
15

Đây là mẫu mã của tôi:Làm thế nào để tạo ra một tài liệu xml trong python

from xml.dom.minidom import * 
def make_xml(): 
    doc = Document() 
    node = doc.createElement('foo') 
    node.innerText = 'bar' 
    doc.appendChild(node) 
    return doc 
if __name__ == '__main__': 
    make_xml().writexml(sys.stdout) 

khi tôi chạy đoạn mã trên tôi có được điều này:

<?xml version="1.0" ?> 
<foo/> 

Tôi muốn nhận được:

<?xml version="1.0" ?> 
<foo>bar</foo> 

Tôi đoán rằng có một thuộc tính innerText, nó không có lỗi trình biên dịch, nhưng dường như không hoạt động ... làm cách nào để tạo một văn bản gật đầu e?

Trả lời

8

Đặt thuộc tính trên đối tượng sẽ không cung cấp thời gian biên dịch hoặc lỗi thời gian chạy, nó sẽ không làm gì hữu ích nếu đối tượng không truy cập (ví dụ: "node.noSuchAttr = 'bar'" cũng sẽ không đưa ra lỗi).

Trừ khi bạn cần một tính năng cụ thể của minidom, tôi sẽ nhìn vào ElementTree:

import sys 
from xml.etree.cElementTree import Element, ElementTree 

def make_xml(): 
    node = Element('foo') 
    node.text = 'bar' 
    doc = ElementTree(node) 
    return doc 

if __name__ == '__main__': 
    make_xml().write(sys.stdout) 
10

@Daniel

Cảm ơn bạn đã trả lời, tôi cũng đã tìm ra cách để làm điều đó với minidom (I không chắc chắn về sự khác biệt giữa các ElementTree vs các minidom)

 

from xml.dom.minidom import * 
def make_xml(): 
    doc = Document(); 
    node = doc.createElement('foo') 
    node.appendChild(doc.createTextNode('bar')) 
    doc.appendChild(node) 
    return doc 
if __name__ == '__main__': 
    make_xml().writexml(sys.stdout) 
 

tôi thề tôi đã cố gắng này trước khi đăng câu hỏi của tôi ...

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