Element löschen aus XML
Verfasst: Donnerstag 4. November 2010, 17:35
Hi zusammen,
das XML-Zeugs treibt mich noch in den Wahnsinn ....
Was ich möchte ist ein Element des XMLs löschen. Wissen tue ich das Element ("scenario") und das Attribut ("name") so wie den Wert von dem Attribut.
(Stimmen die Bezeichnungen so ? )
Mit meinem Beispiel komm ich auch an den Knoten, weiß aber jetzt nicht weiter wie ich den Lösche. Ich Benutze wie ihr seht die Qt-XML Klassen. Ob das Sinnvoll ist weiß ich nicht. Auch ob gerade diese Klassen Sinnvoll sind weiß ich nicht. Falls jemand da einen einfacheren Ansatz hat gerne.
Folgendes als Beispiel:
Das ist ein reines Test-Skript also die vielen Imports und Unstimmigkeiten einfach ignorieren.
Eingabe ist dann "s1" oder "s2"
das XML-Zeugs treibt mich noch in den Wahnsinn ....
Was ich möchte ist ein Element des XMLs löschen. Wissen tue ich das Element ("scenario") und das Attribut ("name") so wie den Wert von dem Attribut.
(Stimmen die Bezeichnungen so ? )
Mit meinem Beispiel komm ich auch an den Knoten, weiß aber jetzt nicht weiter wie ich den Lösche. Ich Benutze wie ihr seht die Qt-XML Klassen. Ob das Sinnvoll ist weiß ich nicht. Auch ob gerade diese Klassen Sinnvoll sind weiß ich nicht. Falls jemand da einen einfacheren Ansatz hat gerne.
Folgendes als Beispiel:
Das ist ein reines Test-Skript also die vielen Imports und Unstimmigkeiten einfach ignorieren.
Eingabe ist dann "s1" oder "s2"
Code: Alles auswählen
# -*- coding: UTF-8 -*-
from __future__ import unicode_literals
from PyQt4.Qt import Qt
from PyQt4.QtGui import (QProgressBar, QSpinBox,
QDialog, QApplication,
QMainWindow, QLineEdit,
QRegExpValidator, QLabel,
QHBoxLayout, QWidget,
QInputDialog, QCommandLinkButton,
QTextEdit, QPushButton,
QFileDialog)
from PyQt4.QtCore import (QProcess, SIGNAL,
QString,QStringList,
QRegExp, QVariant)
from PyQt4.QtXml import QDomDocument,QDomNode
import sys
class Dialog(QInputDialog):
def __init__(self, parent=None):
super(Dialog, self).__init__(parent)
class Test(QMainWindow):
def __init__(self, parent = None):
super(Test, self).__init__(parent)
self.widget = QWidget()
self.layout = QHBoxLayout(self.widget)
self.setCentralWidget(self.widget)
self.textEdit = QTextEdit(self)
self.label = QLabel(self)
self.pushButton = QPushButton(u"Eingabe", self)
self.layout.addWidget(self.pushButton)
self.layout.addWidget(self.label)
self.layout.addWidget(self.textEdit)
self.pushButton.clicked.connect(self.deleteScenario)
def deleteScenario(self):
dom = self.newScenarioXml()
self.textEdit.setPlainText(dom.toString(1))
name, ok = QInputDialog.getText(self, "", "scenario name: ")
if ok:
nodeList = dom.elementsByTagName("scenario")
for index in range(nodeList.count()):
node = nodeList.item(index)
attibute = node.attributes().namedItem("name")
value = attibute.nodeValue()
if value == name:
self.textEdit.append("Name gefunden: %s" % value)
def newScenarioXml(self):
dom = QDomDocument()
xmlString = u"""<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE TEST>
<TEST VERSION='1.0' >
<project path='C:/Users/test/Desktop/Test' name='Test_123' >
<scenario path='s1' active='no' name='s1' />
<scenario path='s2' active='no' name='s2' />
</project>
</TEST>"""
dom.setContent(QString(xmlString))
return dom
if __name__ == '__main__':
app = QApplication(sys.argv)
t = Test()
t.show()
app.exec_()