Python XMLTODICT | XML Knoten mit Bindestrich, wie parsen?

Blackbenji

Lieutenant
Registriert
Nov. 2009
Beiträge
557
Hallo zusammen,

ich möchte eine XML Seite aus dem Web absurfen und mir aus verschiedenen Knoten Informationen holen.
Die XML kann ich leider - im Moment - nicht ändern, daher muss ich mit den Vorgegebenen Werten arbeiten.

Das XML sieht ungefähr so aus:

Code:
<status hostname="web1234" app-version="V1.0">
	<mandant id="live" name="App-Live" sessions="1" source="db">
		<content-version package-overlay="v1.00.12">...</mbv-version>
	</mandant>
	<mandant id="live2" name="App-Live-2" sessions="1" source="db">
		<content-version package-overlay="v1.00.13-b">...</mbv-version>
	</mandant>
</status>

Mein Code dazu sieht so aus:
Code:
import urllib2, xmltodict

urllib2.urlopen(URL, timeout=15)
input = urllib2.urlopen(URL, timeout=15)
html = input.read()
input.close()

result = xmltodict.parse(html)

# debug
# print result

print "Host: " + result['status']['@hostname']
print "Software Version " + result['status']['@app-version']


for id in result['status']['mandant']:
    print id

Der Output sieht dann in so aus:
Code:
OrderedDict([(u'@id', u'live'), (u'@name', u'App-Live'),  (u'@session', u'1'), (u'@source', u'db'), (u'content-version', OrderedDict([(u'@package-overlay', u'v1.00.12"')])])
OrderedDict([(u'@id', u'live2'), (u'@name', u'App-Live-2'),  (u'@session', u'1'), (u'@source', u'db'), (u'content-version', OrderedDict([(u'@package-overlay', u'v1.00.13-b"')])])

wie komme ich nun aber an die content-version heran?

Code:
for content-version in id
liefert leider einen Fehler ... hat jemand eine Idee?
 
Ich kenn xmltodict nicht, aber gibt ja noch andere Parser die vielleicht das besser können? Ich hab mal lxml benutzt, ist aber auch schon eine Weile her.
 
Hallo Blackbenji,
du musst glaube ich nur dein OrderedDict in ein "normales" Dict umwandeln und kannst dann direkt auf die content-version zugreifen:

Code:
print dict(id)["content-version"]

MfG
 
Hallo,

ich habe mir jetzt anders geholfen, da ich die Datei ja direkt lese und als str speichere, kann ich den string ja manipulieren:

Code:
newhtml = html.replace("content-version", "contentversion")

Und schon kann ich weiter arbeiten ;)

Vielen Dank!
 

Ähnliche Themen

Zurück
Oben