String matchen

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
alla
User
Beiträge: 2
Registriert: Donnerstag 14. Januar 2010, 11:37

hallo zusammen,

ich bin python-neuling :( also ich hab eine xml-datei, die eingelesen wird und in die variable "data" gespeichert. für die xml-zeug benutze ich xml.dom import minidom für python. Ich muss die if-schleife so anpassen, dass die Bedingung (schwarz markiert) anders ist. und zwar dieser code ist für folgende XML gedacht:

<Item>
<Category>rest</Category>
<Qualifier>12</Qualifier>
<Value>Info: Inhalt</Value>
</Item>

ich brauche den string "Inhalt". das funktioniert mit dem code: er kopiert den wert des feldes <Value> und löscht "Info:", "Inhalt" wird behalten und ist der Teil der Bedingung. Nun muss ich das so anpassen, dass es für ein anderes XML funktioniert (der wert des Value-Feldes ist eben anders) und zwar:

<Value>Int: Resolving-System; Info: kostenfrei; Bezug: Voll // 2009 dig von: TT. </Value>

Aus diesem ganzen XML-Attribut will ich den String "Voll" matchen.

Hier ist die if-schleife

Code: Alles auswählen

for itemnode in dom_data.getElementsByTagName("Item"):
                    if itemnode.getElementsByTagName("Category")[0].firstChild.data == "rest" and itemnode.getElementsByTagName("Qualifier")[0].firstChild.data == "12"+subcat:
                        adamobjtype = itemnode.getElementsByTagName("Value")[0].firstChild.data.lstrip("Info:").strip()
                        document.logger.Info("%s: Object type: %s" % (self._name, adamobjtype))
 
Wie mache ich das?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also zum einen würde ich Dir mal zu ElementTree raten, speziell aus dem lxml Modul. Da kannst Du auch schön XPath nutzen, um schon mal an das gewünschte Tag zu kommen.

Zum Problem: Entweder Du kennst die Struktur des Datenstrings, dann musst Du entsprechend parsen, oder aber Du kennst mögliche Werte und willst nur gucken, ob die drin stehen.

Letzteres geht einfach mit

Code: Alles auswählen

"voll" in "Int: Resolving-System; Info: kostenfrei; Bezug: Voll // 2009 dig von: TT. "
Generell ist es natürlich fragwürdig, wieso die Werte nicht in die XML-Struktur eingebettet werden. Das führt den Sinn von XML ja ad absurdum... (aber vermutlich ist das Format nicht von Dir beeinflussbar?)

Für das Parsing müßtest Du ja wissen, wie die Struktur aufgebaut ist. So wie ich das sehe sind das Key-Value-Paare, die durch ";" getrennt sind. Allerdings steht weiter hinten ja noch ein "//" Konstrukt. Was hat es damit auf sich?
alla
User
Beiträge: 2
Registriert: Donnerstag 14. Januar 2010, 11:37

Hat sich erledigt... hab's mit regex gelöst :) danke!
Antworten