Вопрос

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

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>

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

Это было полезно?

Решение

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

Другие советы

@Дэниел

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top