Seite 1 von 1

xml.dom.minidom Verständnisproblem

Verfasst: Freitag 25. November 2016, 22:56
von paeppi_79
Hallo,
ich arbeite gerade an einem Projekt wo ich mit XML Dateien arbeiten muss.
Das erstellen einer solchen Datei und das lesen funktioniert soweit.
Jetzt habe ich das Problem dass ich einen einzelnen Wert ändern muss ohne den ganzen Baum neu zu erstellen.

Gibt es eine ähnlich simple Art den Wert(Text) von Leistung auf einen neuen Wert zu setzen und in der XML zu speichern?

Code: Alles auswählen

        generator="MI36 "
        baum = dom.parse('MI.xml')
        for eintrag in baum.firstChild.childNodes:                              
            if eintrag.nodeName == "mi":
                if eintrag.getAttribute("id")==generator:                          
                    for knoten in eintrag.childNodes:
                        if knoten.nodeName == "Leistung": 
                            print "Leistung"
                            soll_p=(float(knoten.firstChild.data.strip()))

                        elif knoten.nodeName == "Spannung":
                            soll_u=(float(knoten.firstChild.data.strip()))
                                            
                        elif knoten.nodeName == "Strom":
                           soll_i=(float(knoten.firstChild.data.strip()))
                                            
                        elif knoten.nodeName == "Frequenz":
                            soll_f=(float(knoten.firstChild.data.strip()))
                                            
                        elif knoten.nodeName == "Leistung_V":
                            soll_p_archiv=(float(knoten.firstChild.data.strip()))
                                            
                        elif knoten.nodeName == "Spannung_V":
                            soll_u_archiv=(float(knoten.firstChild.data.strip()))

Re: xml.dom.minidom Verständnisproblem

Verfasst: Freitag 25. November 2016, 23:11
von BlackJack
@paeppi_79: Du kannst das `data`-Attribut nicht nur abfragen, sondern auch setzen.

Mein xml.dom.minidom Verständnisproblem ist ja das ich nicht verstehe warum irgendjemand dieses Modul verwendet. Insbesondere wo in der Standardbibliothek doch schon eine Alternative existiert die nicht so furchtbar nach Java aussieht.

Edit: Solltest Du trotzdem bei `minidom` bleiben wollen schau Dir wenigstens mal Methoden wie `getElementsByTagName()` und `getElementById()` an.

Re: xml.dom.minidom Verständnisproblem

Verfasst: Sonntag 27. November 2016, 13:03
von Sirius3
@paeppi_79: das ganze mal mit ElementTree, unter der Voraussetzung, dass die ID eindeutig ist und deshalb die ganzen for-Schleifen unnötig sind:

Code: Alles auswählen

from xml.etree.ElementTree import ElementTree

generator="MI36 "
baum = ElementTree(file='MI.xml')
eintrag = baum.find('mi[@id="%s"]' % generator)
soll_p = float(eintrag.findtext("Leisung"))
soll_u = float(eintrag.findtext("Spannung"))
soll_i = float(eintrag.findtext("Strom"))
soll_f = float(eintrag.findtext("Frequenz"))
soll_p_archiv = float(eintrag.findtext("Leistung_V"))
soll_u_archiv = float(eintrag.findtext("Spannung_V"))
Setzen geht da genaus einfach:

Code: Alles auswählen

eintrag.find("Leisung").text = str(soll_p)

Re: xml.dom.minidom Verständnisproblem

Verfasst: Sonntag 27. November 2016, 13:19
von pixewakb
Ich habe fürs XML-Parsen schon mal BeautifulSoup verwendet:

https://www.crummy.com/software/BeautifulSoup/

Ich meine mich zu erinnern, dass man XML angeben müsste, dass die Suppe korrekt zubereitet wird, danach ist es sehr einfach. XML-Schreiben geht damit m. E. nicht.