Frage: Hinzufügen von DTD mit etree.elementtree

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
djangofish
User
Beiträge: 51
Registriert: Dienstag 16. Oktober 2012, 09:43
Kontaktdaten:

Hallo,

ich habe ein kleines Problem. Ich parse eine XML-Datei, bearbeite speichere sie wieder. Leider geht dabei der Verweis auf die DTD verloren. Wir kann ich diese in die Zieldatei wieder einfügen?

Mein Code(ausschnitt):

Code: Alles auswählen

# -*- coding: UTF-8 -*-
import os
import shutil
import time
from xml.etree.ElementTree import ElementTree
from xml.etree import ElementTree as etree
import xml.etree.ElementTree as ET




class add_sort():
        
    def openXML(self):
        
        file_xml = 'VDF_SparteCluster_md_1_080.xml'
        
        return file_xml
        
    
    def addElement(self):
        
        file_model = ElementTree()
        file_model.parse(self.openXML())

        list_maincategory = file_model.find('KATEGORIEN')
        list_firstordercategory = list_maincategory.findall('KATEGORIE')
        
        for firstordercat in list_firstordercategory:
            #. hier wird was gemacht
			#.
			#.
			#.
			#.
            

                                

        file_model.write('output.xml', 'UTF-8', xml_declaration=True)

    
if __name__ == "__main__":
    
    sorter = add_sort()
    sorter.addElement()
Benutzeravatar
snafu
User
Beiträge: 6853
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Du musst die Angabe zur DTD leider händisch ins File einfügen, soweit ich weiß, da ``etree.elementtree`` dies nicht von sich aus unterstützt. Hier ein Beispiel. Besser wäre es, ``lxml`` zu nutzen, welches die DTD-Angabe korrekt parsen würde.
djangofish
User
Beiträge: 51
Registriert: Dienstag 16. Oktober 2012, 09:43
Kontaktdaten:

sie sollte in die zweite Zeile der XML-Datei:

Code: Alles auswählen

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE ARTIKEL SYSTEM "ARTIKEL.dtd"> 
<ARTIKEL>
Leider weiß ich nicht, wie das geht mit elementtree und viel hab ich dazu auch nicht gefunden. Wie ich das encoding hinzufügen kann, ist ja relativ einfach. Aber der Verweis auf eine DTD scheint umständlicher zu sein.
BlackJack

@djangofish: Ich würde auch zu `lxml` raten. Da funktioniert das ohne das man etwas tun muss. Das `ElementTree` aus der Standardbibliothek sieht das einfach nicht vor.
djangofish
User
Beiträge: 51
Registriert: Dienstag 16. Oktober 2012, 09:43
Kontaktdaten:

Ok,..dann schau ich mir lxml nochmal genauer an :)

Danke für eure Hilfe
Antworten