Seite 1 von 1

Richigen Knoten ermitteln

Verfasst: Mittwoch 10. Mai 2006, 14:32
von MissUnderstud
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.

Re: Richigen Knoten ermitteln

Verfasst: Mittwoch 10. Mai 2006, 14:56
von gerold
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:

Code: Alles auswählen

item: Null
item: Bass Drum
mfg
Gerold
:-)

Verfasst: Mittwoch 10. Mai 2006, 22:25
von BlackJack
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

Thanks und dennoch eine Frage

Verfasst: Donnerstag 11. Mai 2006, 09:13
von MissUnderstud
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

Re: Thanks und dennoch eine Frage

Verfasst: Freitag 12. Mai 2006, 13:55
von Leonidas
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