Сведения о вопросе

Junior

12:43, 19th August, 2020

Теги

python   xml    

Как создать документ xml в python

Просмотров: 404   Ответов: 3

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

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



  Сведения об ответе

davran

18:57, 15th August, 2020

@Daniel

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

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


  Сведения об ответе

KOMP

09:34, 29th August, 2020

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


  Сведения об ответе

baggs

11:05, 25th August, 2020

Я нашел довольно подробный учебник по методу minidom

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться