2008-08-27 2 views
15

Вот мой пример кода:Как создать документ XML в 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) 

когда я запускаю приведенный выше код я получаю это:

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

Я хотел бы получить:

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

Я только догадывался, что существовало свойство innerText, оно не дает компиляторной ошибки, но, похоже, не работает ... как я могу создать текстовый кивок е?

ответ

8

Установка атрибута объекта не даст времени компиляции или времени выполнения, она просто ничего не принесет пользы, если объект не получит к ней доступа (то есть «node.noSuchAttr = 'bar'» также не даст ошибку).

Если вы не нуждаетесь в специфическую особенность minidom, я смотрел бы на 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

Спасибо за ответ, я понял, как сделать это с minidom (I не уверен, разницы между ElementTree В.С. 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) 
 

Я клянусь, что я попробовал это, прежде чем отправлять на мой вопрос ...

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