Как создать документ XML в Python - PullRequest
19 голосов
/ 27 августа 2008

Вот мой пример кода:

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, оно не выдает ошибку компилятора, но, похоже, не работает ... как мне создать текстовый узел?

Ответы [ 3 ]

11 голосов
/ 27 августа 2008

@ Daniel

Спасибо за ответ, я также выяснил, как это сделать с минидомом (я не уверен в разнице между ElementTree и минидомом)


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)

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

9 голосов
/ 27 августа 2008

Установка атрибута для объекта не даст ошибку времени компиляции или времени выполнения, она просто ничего не даст, если объект не получит к ней доступ (т.е. "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)
4 голосов
/ 27 августа 2008

Я нашел довольно подробное руководство по методу минидом

Вот учебник для метода etree . Это намного приятнее читать и кажется довольно простым. Это также касается синтаксического анализа XML (кратко)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...