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.
MissUnderstud
User
Beiträge: 3 Registriert: Dienstag 2. Mai 2006, 13:04
Mittwoch 10. Mai 2006, 14:32
Hallo,
ich möchte gerne auf einen bestimmten Knoten in einem XML-Dokument zugreifen, das wie folgt aussieht:
Code: Alles auswählen
<?xml version="1.0" encoding="UTF-8"?>
<purchaseOrder>
<c>
<d>
<daten>
<item>
<name/>
<sku/>
<price/>
<qty/>
</item>
<item>
<name>Bass Drum</name>
<sku>223-322433</sku>
<price>$3199.99</price>
<qty>1</qty>
</item>
</daten>
</d>
</c>
</purchaseOrder>
Nun möchte ich den Wert "Bass Drum" haben. Ich habe schon einiges mit childNodes versucht, aber ich bin nie draufgekommen **grr*.
Kann mir jemand weiterhelfen?
Danke
MissUnderstud
Edit (BlackJack): Code in XML-Tags gesetzt.
gerold
Python-Forum Veteran
Beiträge: 5555 Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:
Mittwoch 10. Mai 2006, 14:56
MissUnderstud hat geschrieben: Hallo,
ich möchte gerne auf einen bestimmten Knoten in einem XML-Dokument zugreifen
Hi MissUnderstud!
Versucht mal BeautifulSoup.
http://www.python-forum.de/topic-4664.html
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
xml = \
"""<?xml version="1.0" encoding="UTF-8"?>
<purchaseOrder>
<c>
<d>
<daten>
<item>
<name/>
<sku/>
<price/>
<qty/>
</item>
<item>
<name>Bass Drum</name>
<sku>223-322433</sku>
<price>$3199.99</price>
<qty>1</qty>
</item>
</daten>
</d>
</c>
</purchaseOrder>"""
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(xml)
for name in soup("name"):
print "item:", name.string
Ergebnis:
mfg
Gerold
BlackJack
Mittwoch 10. Mai 2006, 22:25
Mit
ElementTree geht's natürlich auch:
Code: Alles auswählen
import elementtree.ElementTree as etree
source = """\
<?xml version="1.0" encoding="UTF-8"?>
<purchaseOrder>
<c>
<d>
<daten>
<item>
<name/>
<sku/>
<price/>
<qty/>
</item>
<item>
<name>Bass Drum</name>
<sku>223-322433</sku>
<price>$3199.99</price>
<qty>1</qty>
</item>
</daten>
</d>
</c>
</purchaseOrder>"""
root = etree.fromstring(source)
for element in root.findall('.//name'):
print element.text
MissUnderstud
User
Beiträge: 3 Registriert: Dienstag 2. Mai 2006, 13:04
Donnerstag 11. Mai 2006, 09:13
Danke erst mal für das Kompliment, Gerold......
und auch an BlackJack......
trotzdem noch eine klitzekleine Frage:
Geht der Zugriff auch mit den Standardmethoden/-funktionen von DOM?
Liebe Grüße
Leonidas
Python-Forum Veteran
Beiträge: 16025 Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:
Freitag 12. Mai 2006, 13:55
MissUnderstud hat geschrieben: Geht der Zugriff auch mit den Standardmethoden/-funktionen von DOM?
Klar doch:
Code: Alles auswählen
#!/usr/bin/env python
# -*- encoding: latin-1 -*-
from xml.dom.minidom import parse
dom = parse('drum.xml')
names = [name for name in dom.getElementsByTagName('name') if name.childNodes != []]
for name in names:
print name.childNodes[0].nodeValue
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice