Jak mogę utworzyć dokument xml w python

głosy
16

Oto mój przykładowy kod:

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)

kiedy uruchomić powyższy kod otrzymuję to:

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

Chciałbym dostać:

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

I tylko domyślić, że istnieje własność innerText, że nie daje błąd kompilatora, ale nie wydają się działać ... jak mam iść na temat tworzenia węzła tekstowego?

Utwórz 27/08/2008 o 01:21
źródło użytkownik
W innych językach...                            


3 odpowiedzi

głosy
9

Ustawienie atrybutu na obiekcie nie da kompilacji lub błąd czasu, to po prostu zrobić nic użytecznego, jeśli obiekt nie ma do niego dostęp (tj „ node.noSuchAttr = 'bar'” również nie dają błąd).

Chyba trzeba konkretną cechę minidom, chciałbym spojrzeć na 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)
Odpowiedział 27/08/2008 o 01:35
źródło użytkownik

głosy
10

@Daniel

Dzięki za odpowiedź, ja też zorientowali się, jak to zrobić z minidom (nie jestem pewna różnica pomiędzy ElementTree kontra 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)

Przysięgam, że próbowałem to przed wysłaniem na moje pytanie ...

Odpowiedział 27/08/2008 o 01:42
źródło użytkownik

głosy
4

Znalazłem dość rozwlekły tutorial sposobu minidom

Oto poradnik dla metody etree . Jest o wiele ładniejszy czytać, i wydaje się dość prosta. To samo odnosi się nad parsowania xml (krótko)

Odpowiedział 27/08/2008 o 01:45
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more