unknown_member hat geschrieben:Habe es jetzt mit folgender Routine geschafft, aus der Zeichenkettenrepräsentation einen Node zu holen:
Code: Alles auswählen
def getNodeFromString(string, dom):
strings = string.split(" ")
res = strings[2]
nodes = []
for knotenName in dom.getElementsByTagName(res):
nodes.append(knotenName)
for i in range(len(nodes)):
if nodes[i]==string:
knotenName = nodes[i]
return knotenName
Hua.... ziemlich grausam, was Du da machst!
Zuerst noch mal zum Problem: Wieso merkst Du Dir nicht einfach sofort den Tagnamen? Element-Objekte haben das Attribut
tagName. Das kannst Du Dir auch an der Stelle merken, an der Du Dir im Moment stattdessen den "normalen" Objekt-String merkst! Viel einfacher und Du sparst Dir das Fehler anfällige Parsing des Repräesentationsstrings.
Dann zum Snippet.
Zeilen 5-7 machen ziemlich sinnloses. Die Methode
getElementsByTagName() liefert laut Doku ein iterierbares Objekt zurück, in dem alle gefundenen Knoten liegen. Ist so ziemlich dasselbe wie die Liste, die Du dort manuell erstellst.
Zeilen 8-10 lassen sich viel besser so schreiben:
Code: Alles auswählen
for node in nodes:
if node.tagName == string
special_node = node
Bitte beachte, dass es keine gute Idee ist
string als Bezeichner zu nutzen. Denn string ist auch ein Modulname aus der Standard-Lib. So etwas sollte man aus vielen Gründen vermeiden.
Ich würde Deinen Code so umbauen:
Code: Alles auswählen
def getNodeFromString(node_name, dom):
for node in dom.getElementsByTagName(res):
if node.tagName==node_name:
result_node = node
return result_node
Allerdings kapiere ich nicht, was diese Funktion überhaupt bewirken soll! Du suchst einen Knoten mit einem bestimmten Tag-Namen innerhalb des Dokumentes oder eines Teils davon. Dann gibst Du den letzten Knoten aus diesem Abschnitt zurück, der dem Tag-Namen entspreicht. Was genau löst das?
Ich würde Dir raten evtl. doch noch einmal Dein gesamtes Problem zu schildern. Man kann aus dem Code durchaus erkennen, dass Du wohl eher Python Neuling bist. Daher kann es schon sein, dass man Dein Problem ganz anders und viel eleganter lösen kann
Davon abgesehen empfehle ich Dir dringend das Tutorial durchzuarbeiten. Denn das direkte Iterieren über Sequenzen ist etwas sehr banales und grundlegendes