Code: Alles auswählen
for x, y in punkt_liste:
point = etree.SubElement(points, 'point', x='%d' % x, y='%d' % y)
Code: Alles auswählen
for x, y in punkt_liste:
point = etree.SubElement(points, 'point', x='%d' % x, y='%d' % y)
Die Frage hatte ich auch schonmal gestelltDaniela hat geschrieben:Und wie kann ich jetzt die Ausgabe so hinbekommen, dass alles vernünftig verschachtelt ist, ohne dass alles in eine Zeile geschrieben wird. Also so dass eine lesbare XML-Struktur entsteht?
Code: Alles auswählen
kommentar = etree.Comment("DOCTYPE roadmap SYSTEM \"roadmap.dtd\"")
Code: Alles auswählen
doc = open('datei.rm', 'rw')
tree = etree.parse(doc) # einlesen der vorhandenen XML-Datei
root = tree.getroot() # Bestimmung des Wurzelelements
stations = tree.getroot().find("stations") # erster Knoten wird ausgelesen
kommentar = etree.Comment("DOCTYPE roadmap SYSTEM \"roadmap.dtd\"") # wo muss der rangehängt werden?
...
tree = etree.ElementTree(root)
tree.write('datei.rm', encoding='UTF-8')
Code: Alles auswählen
In [16]: r = ET.Element("root")
In [17]: k = ET.Comment("Ich bin der Kommentar!")
In [18]: r.insert(0, k)
In [19]: ET.tostring(r)
Out[19]: '<root><!-- Ich bin der Kommentar! --></root>'
Code: Alles auswählen
<!DOCTYPE bla SYSTEM "keks.dtd">
Code: Alles auswählen
dockommentar = etree.XMLTreeBuilder.doctype('bla', 0, "keks.dtd")
Code: Alles auswählen
TypeError: unbound method doctype() must be called with XMLTreeBuilder instance as first argument (got str instance instead)
Code: Alles auswählen
doctype(name, pubid, system)
#Handles a doctype declaration. name is the doctype name. pubid is the public identifier. system is the system identifier.
Hab ich gemacht. mein komplettes XML-dokument ist nun in einem StringY0Gi hat geschrieben:Mit ET kannst du einfach ein neues `Element` anlegen und das als Root verwenden, indem du einfach `SubElement`e dranhängst. Über das Root-Element wandelst du abschließend das Dokument in einen String um (mit der Funktion `tostring`)
Code: Alles auswählen
wurzel = etree.tostring(root)
String-Konkatenation ist doch eigentlich nur das Verknüpfen 2er Strings mit einem "+"-Zeichen, oder???Y0Gi hat geschrieben:und kannst dann über normale String-Konkatenation den gewünschten Header davor setzen.
Code: Alles auswählen
zsgf = header + baum
Lies noch einmal die Fehlermeldung und dann mach mal folgendes:Daniela hat geschrieben:Aber hier bekomme ich folgendes dann zurück:Code: Alles auswählen
dockommentar = etree.XMLTreeBuilder.doctype('bla', 0, "keks.dtd")
Code: Alles auswählen
TypeError: unbound method doctype() must be called with XMLTreeBuilder instance as first argument (got str instance instead)
Code: Alles auswählen
print etree.XMLTreeBuilder
print etree.XMLTreeBuilder()
Jein. Die Funktionen die in ``operator`` definiert sind, sind eigentlich nicht dafür gedacht direkt aufgerufen zu werden, dafür gibt es ja die normalen Operatoren. Sie sind vielmehr dazu gedacht in partielle Funktionen oder als Funktionen höherer Ordnung verwendet zu werden; sie direkt zu verwenden geht ist aber unnötig kompliziert.Daniela hat geschrieben:String-Konkatenation ist doch eigentlich nur das Verknüpfen 2er Strings mit einem "+"-Zeichen, oder???Y0Gi hat geschrieben:und kannst dann über normale String-Konkatenation den gewünschten Header davor setzen.
Ich hab aber auch noch die Methode ``concat`` im Modul ``Operator`` gefunden, welche ja das gleiche Ergebniss liefert. Oder bin ich jetzt auf dem Holzweg.
Ja, ich hab nie mit der Instanz gearbeitet.DasIch hat geschrieben:Lies noch einmal die Fehlermeldung und dann mach mal folgendes:Fällt dir etwas auf?Code: Alles auswählen
print etree.XMLTreeBuilder print etree.XMLTreeBuilder()
Code: Alles auswählen
dockommentar = etree.XMLTreeBuilder().doctype('bla', "keks.dtd")
TypeError: doctype() takes exactly 4 arguments (3 given)
Code: Alles auswählen
dockommentar = etree.XMLTreeBuilder().doctype('bla', "public", "keks.dtd")
Code: Alles auswählen
dockommentar = etree.XMLTreeBuilder().doctype('bla','public', "keks.dtd")
etree.insert(0, dockommentar)
etree.tostring(root)
Code: Alles auswählen
AttributeError: 'module' object has no attribute 'insert'